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