iOS時間常用方法

最近使用時間的方法交頻繁,就總結(jié)了一下自己比較常見的時間相關(guān)的方法如下與大家分享。


首先是NSDate的部分方法

  1. 可以使用 首先創(chuàng)建現(xiàn)在的時間使用類方法

      NSDate *date = [NSDate date];
      或使用對象方法 NSDate *date = [[NSDate alloc]init];
    

2.時間轉(zhuǎn)化為字符串-(NSString *)stringFromDate:(NSDate *)date;

   NSDate *dataNow = [NSDate date];
   NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
   formatter.dateFormat = @"HH:mm:ss";
   NSString *dateStr= [formatter stringFromDate:dataNow];```

3.字符串轉(zhuǎn)化為時間-(nullable NSDate *)dateFromString:(NSString *)string;

        NSString *string = @"2014:10:10";
        NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
        formatter.dateFormat = @"HH:mm:ss";
        NSDate *date = [formatter dateFromString:string];
        以上時間格式化樣式可以自定義如下:  
        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; 
        formatter.dateFormat = @"yyyy/MM/dd HH/mm/ss";                                                                                                                      

4.dateByAddingTimeInterval:該方法是加上或減去一段時間得到的時間如:

  -(void)viewDidLoad {
       [super viewDidLoad]; 
     NSDate *data = [NSDate date];NSDateFormatter *formatter =   [[NSDateFormatter alloc]init];
     formatter.dateFormat = @"HH:mm:ss";
     NSString *dateStr= [formatter stringFromDate:data];
    NSLog(@"%s-%@",__FUNCTION__,dataStr);
     data = [data dateByAddingTimeInterval:-60];
     dataStr = [self datatoString:data];
     NSLog(@"%s-%@",__FUNCTION__,dataStr);
   }

第一次大一的時間是10:10:10的話那么第二次打印的就是10:09:10,即比前一次少了60秒
也可以用
NSDate *date2 = [NSDate dateWithTimeInterval:50 sinceDate:date];方法即通過第一個時間加上50秒后的時間


5.關(guān)于日期的比較(使用NSData)

     假如現(xiàn)在的時間date和一個exampleDate比較,下面有兩種方法, 一種是使用NSComparisonResult對象可以直接比較date對象或轉(zhuǎn)化為字   符串后比較字符串,另一種直接使用比較date的系統(tǒng)方法。
     第一種使用NSComparisonResult對象,使用該對象的比較的結(jié)果是一個枚舉如下:
typedef NS_ENUM(NSInteger, NSComparisonResult)
                        {NSOrderedAscending = -1L,
                         NSOrderedSame,
                         NSOrderedDescending
};三種枚舉類型
      NSOrderedAscending對應(yīng)的是順序即前面的時間比較大
      NSOrderedAscending對應(yīng)的是順序即后面的時間比較大
      NSOrderedSame對應(yīng)的是兩個時間字符串相等
     如:   NSComparisonResult result = [data compare:exampleData]; 
     如果result等于NSOrderedAscending就代表順序即現(xiàn)在的時間比較大。

另一種是使用系統(tǒng)方法直接比較早于、晚于、等于這三種情況如下:

BOOL equal = [data isEqual:exampleDate];
BOOL earlier = [data earlierDate:exampleDate];
BOOL later = [data laterDate:exampleDate];

6.- (NSTimeInterval)timeIntervalSinceNow從當(dāng)前時間開始,經(jīng)過多少秒到達對象指定時間。
例子如下:
假如exampleStr是2016-10-30 10:10:10 現(xiàn)在的時間是2016-10-30 09:09:09

NSDate * date= [formatter dateFromString:exampleStr];
//過期日期距今還有多少秒
int time = [date timeIntervalSinceNow];
//時
int h = time/3600;
//分
int m = (time%3600)/60;
//秒
int s = time % 60;
return [NSString stringWithFormat:@"%02d:%02d:%02d",h,m,s];
返回的將是01:01:01

7.- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate
返回當(dāng)前對象時間與參數(shù)傳遞的對象時間的相隔秒數(shù),即返回兩個 時間相隔的時間秒數(shù)

如下:
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:0];
    NSDate *date2 = [NSDate dateWithTimeInterval:50 sinceDate:date];
    NSInteger seconds = [date timeIntervalSinceDate:date2];
    NSLog(@"%ld",(long)seconds);
打印結(jié)果為-50即date2比data塊50秒

NSCalendar & NSDateComponents部分方法

NSCalendar顧名思義,日歷對象封裝了對系統(tǒng)日期的計算,包括這一年開始,一周的開始。

1.以一定的格式查分一個時間如以年月日查分

NSDate * date = [NSDate date];//當(dāng)前時間
NSCalendar * calendar = [NSCalendar currentCalendar];//當(dāng)前用戶的calendar
int unit = NSCalendarUnitYear | NSCalendarUnitMonth |   NSCalendarUnitDay;
NSDateComponents * components = [calendar components:unit fromDate:date];
NSLog(@"%ld年%ld月%ld日" ,(long)components.year,(long)components.month,(long)components.day);

2.可以獲得相對時間

NSDateComponents * components = [[NSDateComponents alloc] init];
components.year = 1;
components.month = 1;
components.day = 1;
components.hour =1;
NSCalendar * calendar = [NSCalendar currentCalendar];
NSDate * currentDate = [NSDate date];
NSDate * exampleData = [calendar dateByAddingComponents:components toDate:currentDate options:NSCalendarMatchStrictly];
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy年MM月dd日";
NSString * dateStr = [formatter stringFromDate:exampleData];
NSLog(@"%@",dateStr);
這樣獲得的就是從現(xiàn)在起一年零一個月一天一小時后的時間

3.獲得兩個時間的差值

NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd";
NSString *selfStr = [formatter stringFromDate:date];
NSDate *dateNow = [formatter dateFromString:selfStr];
NSDate *exampleDate = [date dateByAddingTimeInterval:360.0];
// 獲得nowDate和exampleDate的差距
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSCalendarUnitDay fromDate:dateNow toDate:exampleDate options:0];
NSLog(@"%d年%d月%d日", components.year, components.month, components.day);
這樣打印出來的即是兩個時間相差的多少年多少月多少日

4.既然有該方法(方法3)那么就可以比較兩個時間的具體如:
如果返回的cmps.year==1,那么就表示兩個時間差一年;
如果差cmps.year==1就代表差一天

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容