一、nsdate
1.nsdate物件用來表示乙個具體的時間點。
2.nsdate是乙個類簇,我們所使用的nsdate物件,都是nsdate的私有子類的實體。
3.nsdate儲存的是gmt時間,使用的時候會根據 當前應用 指定的 時區 進行時間上的增減,以供計算或顯示。
//ios時間
//當前時間、預設0時區
nsdate *date = [nsdate date];
nslog(@"當前時間date%@",date);
//nsdateformatter是用來設定nsdate的格式
nsdateformatter *formatter = [[nsdateformatter alloc] init];
//設定為系統時區
formatter.timezone = [nstimezone systemtimezone];
//用來設定nsdate的輸出格式
formatter.dateformat = @"yyyy-mm-dd hh:mm:ss";
//用來講本地時間轉換成字串的形式輸出
nsstring *timestr = [formatter stringfromdate:[nsdate date]];
nslog(@"本地時間 nsdate的輸出格式 %@",timestr);
除此之外,日期之間比較可用以下方法:
//與otherdate比較,相同返回yes
- (bool)isequaltodate:(nsdate *)otherdate;
//與anotherdate比較,返回較早的那個日期
- (nsdate *)earlierdate:(nsdate *)anotherdate;
//與anotherdate比較,返回較晚的那個日期
- (nsdate *)laterdate:(nsdate *)anotherdate;
二、nsdateformatter
//將字串轉換為日期物件.
nsstring *datestrs = @"2020-01-01-18:10:00";
nsdateformatter *formattertime = [nsdateformatter new];
formattertime.dateformat = @"yyyy-mm-dd-hh:mm:ss";
formattertime.timezone = [nstimezone timezonewithabbreviation:@"gmt"];
nsdate *datetime = [formattertime datefromstring:datestrs];
nslog(@"將字串轉換為日期物件date %@",datetime);
1.將時間字串轉換到nsdate物件,一般都是使用"年月日 時分秒",資料庫中的date型別基本上也是這樣的時間型別。 格式一般為:yyyy-mm-dd hh:mm:ss。
注意:yyyy是小寫的;大寫的yyyy的意思有些不同——「將這一年中第一周的週日當作今年的第一天」,因此有時結果和yyyy相同,有時就會不同。
2.將nsdate物件轉換成特定格式的字串。
轉換後的字串會根據裝置的「區域格式」,顯示特定語言的結果。假如程式需要保證不同語言環境下顯示一致,請注意這方面的問題,使用其他代替方法!
nsdateformatter 格式化引數如下:
g: 公元時代,例如ad公元
yy: 年的後2位
yyyy: 完整年
mm: 月,顯示為1-12
mmm: 月,顯示為英文月份簡寫,如 jan
mmmm: 月,顯示為英文月份全稱,如 janualy
dd: 日,2位數表示,如02
d: 日,1-2位顯示,如 2
eee: 簡寫星期幾,如sun
eeee: 全寫星期幾,如sunday
aa: 上下午,am/pm
h: 時,24小時制,0-23
k:時,12小時制,0-11
m: 分,1-2位
mm: 分,2位
s: 秒,1-2位
ss: 秒,2位
s: 毫秒
常用日期結構:
yyyy-mm-dd hh:mm:ss.sss
yyyy-mm-dd hh:mm:ss
yyyy-mm-dd
mm dd yyyy
三、nsdate和時間戳的相互轉換
// nsdate 轉換成時間戳
nsstring *timesp = [nsstring stringwithformat:@"%ld",(long)[[nsdate date] timeintervalsince1970]];
nslog(@"timesp : %@", timesp);
// 時間戳轉換成nsdate
nsdate *currenttime = [nsdate datewithtimeintervalsince1970:[timesp intvalue]];
nslog(@"currenttime : %@", currenttime);
四、nscalendar1.nscalendar對世界上現存的常用的曆法進行了封裝,既提供了不同曆法的時間資訊,又支援日曆的計算。
2.nsdatecomponents將時間表示成適合人類閱讀和使用的方式,通過nsdatecomponents可以快速而簡單地獲取某個時間點對應的「年」,「月」,「日」,「時」,「分」,「秒」,「周」等資訊。當然一旦涉及了年月日時分秒就要和某個曆法繫結,因此nsdatecomponents必須和nscalendar一起使用,預設為公曆。
3.nsdatecomponents返回的day, week, weekday, month, year這一類資料都是從1開始的。因為日曆是給人看的,不是給計算機看的,從0開始就是個錯誤。
//取到nsdate物件的各個部分 年 月 日 周
//1. 建立1個當前的日曆物件.
// 作用: 可以取到1個日期物件的各個部分.
nscalendar *calendar = [nscalendar currentcalendar];
//2. 指定日曆物件,要去取日期物件的那些部分.
nsdatecomponents *comp = [calendar components:nscalendarunityear|nscalendarunitmonth|nscalendarunitday|nscalendarunitweekday fromdate:date];
//3. 通過nsdatecomponents取到指定的日期的各個部分.
nslog(@"%lu",comp.year);
nslog(@"%lu",comp.month);
nslog(@"%lu",comp.day);
nslog(@"%lu",comp.weekday);
iOS NSDate的主要幾種時間形式
nsdate 時間的獲取和操作 1 獲取當前時間 1 獲取當前日期 2 nsdate date sender.date 3 nslog date 2 將date轉換為字串並格式化 1 date轉字串 2 nsdateformatter formatter nsdateformatter alloc ...
iOS NSDate的主要幾種時間形式
nsdate 時間的獲取和操作 1 獲取當前時間 1 獲取當前日期 2 nsdate date sender.date 3 nslog date 2 將date轉換為字串並格式化 1 date轉字串 2 nsdateformatter formatter nsdateformatter alloc ...
ios NSDate時間不符的解決辦法
ios獲取json資料,把年月日時分秒轉換成nsdate物件,總是發現小時不符合,年月日分秒倒是沒問題。正確寫法如下 nsdate date nsdate date 直接初始化的時間,也是當前時間 nsdate date nsdate alloc init nstimezone zone nstim...