iOS日期的比較
1.日期可以進行比較以確定大小或相等,也可以確定兩個日期之間的時間間隔。兩個日期的間隔時間差可以使用-timeIntervalSinceDate:方法來計算
- NSDate * now = [NSDate date];
- NSDate * anHourAgo = [now dateByAddingTimeInterval:-60*60];
- NSTimeInterVal timeBetween = [now timeIntervalSinceDate:anHourAgo];
- NSLog(@”%f”,timeBetween);
2.日期比較也可以使用-timeIntervalSinceNow方法擷取和當前的時間間隔
- NSDate * anHourago = [NSDate dateWithTimeIntervalSinceNow;-60*60];
- NSTimeInterval interval = [anHourAgo timeIntervalSinceNow];
- NSLog(@”%f”,interval);
//建立日期格式化對象 NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@ "yyyy-MM-dd HH:mm" ]; //建立了兩個日期對象 NSDate *date1=[dateFormatter dateFromString:@ "2010-3-3 11:00" ]; NSDate *date2=[dateFormatter dateFromString:@ "2010-3-4 12:00" ]; //NSDate *date=[NSDate date]; //NSString *curdate=[dateFormatter stringFromDate:date]; //取兩個日期對象的時間間隔: //這裡的NSTimeInterval 並不是對象,是基本型,其實是double類型,是由c定義的:typedef double NSTimeInterval; NSTimeInterval time =[date2 timeIntervalSinceDate:date1]; int days=(( int ) time )/(3600*24); int hours=(( int ) time )%(3600*24)/3600; NSString *dateContent=[[NSString alloc] initWithFormat:@ "%i天%i小時" ,days,hours]; |
3.NSDate還提供了-laterDate、-earlierDate和compare方法來比較日期
- NSDate * now = [NSDate date];
- NSDate * anHourAgo = [now dateByAddingTimeInterval:-60*60];
- NSDate *result1 = [now laterDate:anHourAgo];
- NSDate * result2 = [now earlierDate:anHourAgo];
- NSComparisonResult result3 = [now compare:anHourAgo];
比較日期大小是任何程式設計語言都會經常遇到的問題,再iOS編程中,通常用NSDate對象來儲存一個時間(包括日期和時間、時區),而且 NSDate類提供了compare方法來進行時間的比較,但有時不想那麼精確的知道兩個日期的大小(預設會比較到秒),可以用下面的實現方法:
+(int)compareOneDay:(NSDate *)oneDay withAnotherDay:(NSDate *)anotherDay{ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"dd-MM-yyyy"]; NSString *oneDayStr = [dateFormatter stringFromDate:oneDay]; NSString *anotherDayStr = [dateFormatter stringFromDate:anotherDay]; NSDate *dateA = [dateFormatter dateFromString:oneDayStr]; NSDate *dateB = [dateFormatter dateFromString:anotherDayStr]; NSComparisonResult result = [dateA compare:dateB]; NSLog(@"date1 : %@, date2 : %@", oneDay, anotherDay); if (result == NSOrderedDescending) { //NSLog(@"Date1 is in the future"); return 1; } else if (result == NSOrderedAscending){ //NSLog(@"Date1 is in the past"); return -1; } //NSLog(@"Both dates are the same"); return 0; }