iOS NSDate等時間類的使用

2021-07-15 19:42:41 字數 3658 閱讀 2816

一、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...