1. 程式人生 > 其它 >dateDiff在Objective-C中的實現

dateDiff在Objective-C中的實現

在學習iOS App開發中遇到需要計算時間差並格式化輸出的需求,沒有現成的方法,需要結合NSCalendar和NSDateComponents來實現。所以乾脆把程式碼封裝成一個熟悉的dateDiff方法。不過這個方法跟VB和sql裡的dateDiff還是有點不一樣,雖然可以封裝成完全一樣,不過我覺得直接返回NSDateComponents會更方便,因為所需要的各種單位上的值都包含在其中了。 我是把程式碼封裝到自己的一個工具類KRUtils裡作為類方法,使用起來也很方便。程式碼如下:

/* dateDiff 方法實現 */   
+(NSDateComponents *) dateDiff:(NSDate *) fromDate toDate:(NSDate *) toDate
{
    NSCalendar *sysCalendar = [NSCalendar currentCalendar];
    unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |
                              NSDayCalendarUnit | NSHourCalendarUnit |
                              NSMinuteCalendarUnit | NSSecondCalendarUnit;
    NSDateComponents *compInfo = [sysCalendar components:unitFlags
                                              fromDate:fromDate
                                              toDate:toDate
                                              options:0];
    return compInfo;
}
/* dateDiff 呼叫示例 */   
-(void) demo
{
    NSDate *date1 = [[NSDate alloc] init];
    NSDate *date2 = [[NSDate alloc] initWithTimeIntervalSinceNow:86400];

    NSDateComponents *diffInfo =[KRUtils dateDiff:date1 toDate:date2];
    NSLog(@"相差 %d天%02d小時%02d分鐘%02d秒", [diffInfo day],
                                              [diffInfo hour],
                                              [diffInfo minute],
                                              [diffInfo second]);
    //輸出結果:“相差 1天00小時00分鐘00秒”    
}