NSDate使用方法

2021-08-30 21:28:47 字數 4038 閱讀 3991

剛剛做ios開發第乙個需求的時候,需要判斷是否為同一天,最近需求需要判斷兩個日期是否為同一周,在網上沒有找到合適的方法,自己寫了乙個,目前用著還行。

nsdate

nsdateformatter

nsdatecomponents

nsdatecomponentformatter

nscalendar

// 建立方法

nsdate *date = [nsdate date];

nslog(@"date %@", date);

2018-09-26 16:10:23.258016+0800[6440:2239584] date時間 = 2018-09-26 08:10:23 +0000

//初始化當前時間,返回零時區時間

nsdate *date = [nsdate date];

//以當前時間為準,正數超前指定秒數,負數延後指定秒數

nsdate *laterdate = [nsdate datewithtimeintervalsincenow:60];

//以2001-01-01 00:00:00 +0000為基準,正數超前指定秒數,負數延後指定秒數

nsdate *newdate = [nsdate datewithtimeintervalsincereferencedate:60];

//以1970-01-01 00:00:00 +0000為基準,正數超前指定秒數,負數延後指定秒數

nsdate *newdate1 = [nsdate datewithtimeintervalsince1970:60];

//例項方法,以指定時間為基準,正數超前指定秒數,負數延後指定秒數

nsdate *newdate2 = [date datebyaddingtimeinterval:60];

//很久以後的某一天

nsdate *newdate3 = [nsdate distantfuture];

//很久以前的某一天

nsdate *newdate4 = [nsdate distantpast];

//比較兩個時間是否相等

- (bool)isequaltodate:(nsdate *)otherdate;

//兩個時間比較,返回較早時間

- (nsdate *)earlierdate:(nsdate *)anotherdate;

//兩個時間比較,返回較晚時間

- (nsdate *)laterdate:(nsdate *)anotherdate;

//兩個時間比較,返回列舉型別

- (nscomparisonresult)compare:(nsdate *)other;

//返回例項時間與refdate時間間隔秒數

- (nstimeinterval)timeintervalsincedate:(nsdate *)refdate;

//返回例項時間與當前時間間隔秒數

- (nstimeinterval)timeintervalsincenow;

//返回例項時間的時間戳

- (nstimeinterval)timeintervalsince1970;

//返回例項時間和2001-01-01 00:00:00 +0000的間隔秒數

- (nstimeinterval)timeintervalsincereferencedate;

//返回當前時間和2001-01-01 00:00:00 +0000的間隔秒數

+ (nstimeinterval)timeintervalsincereferencedate;

nsdateformatter *formatter = [[nsdateformatter alloc] init];

[formatter setdateformat:@"yyyy-mm-dd hh:mm:ss z"];

nsstring *datestr = [formatter stringfromdate:date];

nslog(@"date時間 = %@",datestr);

2018-09-26 16:10:34.223851+0800[6440:2239584] date時間 = 2018-09-26 16:10:23 +0800

nsdateformatter *formatter = [[nsdateformatter alloc] init];

[formatter setdateformat:@"yyyy-mm-dd hh:mm:ss z"];

nsdate *newdate = [formatter datefromstring:@"2018-09-26 15:06:24 +0800"];

nslog(@"newdate = %@", newdate);

2018-09-26 16:15:23.072026+0800 [6448:2241325] newdate = 2018-09-26 07:06:24 +0000

nsdateformatter的指定格式是:@"yyyy-mm-dd hh:mm:ss z",這裡面的z指的是時區。要轉化的字串時間格式必須和這個格式匹配,上面給定的字串時間是:"2018-09-26 15:06:24 +0800",是乙個東八區時間,轉化為nsdate後是零區時間''2018-09-26 07:06:24 +0000'',字面顯示上少了8小時,其實時間一樣。

nsdate *date = [nsdate date];

nstimezone *zone = [nstimezone systemtimezone];//當前時區

nsinteger interval = [zone secondsfromgmtfordate:date];//當前時區和零時區的差值

nsdate *localdate = [date  datebyaddingtimeinterval:interval];//加上差值

nslog(@"localdate = %@",localdate);

2018-09-26 16:19:30.761683+0800 [6456:2242925] localdate = 2018-09-26 16:19:26 +0000

注:使用日期說明符來設定日期格式

eeee:「星期」的全名(比如monday)。如需縮寫,指定1-3個字元(如e,ee,eee代表mon)。

mmmm:「月份」的全名(比如october)。如需縮寫,指定1-3個字元(如m,mm,mmm代表oct)。

dd:某月的第幾天(例如,09或15)

yyyy:四位字串表示「年」(例如2015)

hh:兩位字串表示「小時」(例如08或19)

mm:兩位字串表示「分鐘」(例如05或54)

ss:兩位字串表示「秒」

zzz:三位字串表示「時區」(例如gmt)。縮寫z

ggg:西元前bc或公元後ad

//判斷是否為同一天

- (bool)issameday:(nsdate *)date1 date2:(nsdate *)date2

nsdate使用weekday獲得當天日期在本週的第幾天。返回結果從週日開始計時,從週日到周一分別是[0 ... 6]。

//判斷是否為同一周

- (bool)issameweeks:(nsdate *)date1 date2:(nsdate *)date2

if ([comp2 weekday] == 1)

return (([comp1 weekofyear] == [comp2 weekofyear]) && ([comp1 month] == [comp2 month]) && ([comp1 year] == [comp2 year]));

}

文章參考:

NSDate基本使用方法

獲取當前時間 nsdate now nsdate date nsdateformatter formatter nsdateformatter alloc init 設定格式化 formatter.dateformat yyyy mm dd hh mm ss 取格式化字串 mount formatt...

NSDate 使用總結

1 當前時間建立nsdate nsdate mydate nsdate date nslog mydate mydate 2 從現在開始的24小時 nstimeinterval secondsperday 24 60 60 nsdate tomorrow nsdate datewithtimeint...

NSDate初步使用

nsdate 的常用用法 1.建立或初始化可用以下方法 用於建立 nsdate 例項的類方法有 id date 返回當前時間 id datewithtimeintervalsincenow nstimeinterval secs 返回以當前時間為基準,然後過了 secs 秒的時間 id datewi...