2013-03-15 68 views
2

我取一個日期併爲其創建一個新指針,然後將它與另一個具有相同值的日期進行比較。據報道這回爲同一日期,但他們聲稱沒有成爲比賽:比較相等的NSDates將它們返回爲不等於

NSDate *date2 = [[NSDate alloc] initWithTimeIntervalSince1970:[date1 timeIntervalSince1970]]; 
NSLog(@"date 2: %@", date2); 
NSLog(@"date 3: %@", date3); 
NSLog(@"equal: %i", [date2 isEqualToDate:date3]); 

這就是NSLog的:

date 2: 2013-03-15 11:12:24 +0000 
date 3: 2013-03-15 11:12:24 +0000 
equal: 0 

任何想法,爲什麼這些沒有返回平等?

+3

ü可以檢查兩個nsdates本[DATE3比較:日期2] == NSOrderedSame – 08442 2013-03-15 11:27:38

+0

如何DATE3獲得價值? – 2013-03-15 11:28:41

+2

您的精度可能不足。檢查[date2 timeIntervalSince1970] == [date3 timeIntervalSince1970] – 2013-03-15 11:28:57

回答

2

試試這個..

NSComparisonResult result = [date1 compare:date2]; // comparing two dates 
switch (result) { 
    case NSOrderedAscending: 
    InfoLog(@"date1 is less"); 
    break; 
    case NSOrderedDescending: 
    InfoLog(@"date1 is greater"); 
    break; 
    case NSOrderedSame: 
    InfoLog(@"same date"); 
    break; 
    default: 
    break; 
} 
1

請使用此檢查:

NSCalendar *calendar   = [NSCalendar currentCalendar]; 
NSDateComponents *components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:date2]; 
NSDate *date2New    = [calendar dateFromComponents:components]; 
components     = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:date3]; 
NSDate *date3New    = [calendar dateFromComponents:components]; 

if([date2New isEqualToDate:date3New]) 
{ 
    //do stuffs 
} 

我想在你的代碼中,isEqualToDate問題:將檢查恰好同一天(子第二差也會造成病情失敗)

根據NSDate

isEqualToDate:

返回一個布爾值,指示一個給定的對象是否是 的NSDate對象和正好等於該接收器。 - (BOOL)isEqualToDate:(NSDate *)anotherDate

參數

anotherDate

The date to compare with the receiver. 

返回值

YES如果anotherDate是一個NSDate對象和正好等於該 接收器,否則否。

討論

這種方法檢測的日期之間的子第二差異。如果您希望 比較不太精細粒度的日期,請使用 timeIntervalSinceDate:比較兩個日期

0

它比較與微秒也所以它給像0 timeIntervalSinceDate:值用於日期是一個範圍微秒內該方法中,秒等

0

date2date3通過毫秒關閉。

比較然後用第二精度做到這一點:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *comps = [calendar components:NSSecondCalendarUnit fromDate:date2 toDate:date3 options:0]; 
if (comps.second == 0) { 
    //do something 
}