2013-02-05 217 views
-1

我這樣比較兩個日期:UIDate比較兩個日期

NSDateFormatter *df= [[NSDateFormatter alloc] init]; 
[df setDateFormat:@" dd : MM : yyyy"]; 

NSDate *dt1 = [[NSDate alloc] init]; 
dt1=[df dateFromString:TheDate]; 

NSDate *Date=[NSDate date]; 
NSLog (@"DATE CURRENT: %@ DATE 2 %@", Date, dt1); 

if ([Date compare:dt1] == NSOrderedDescending) { 
    NSLog(@"Date is later than date2"); 

} else if ([Date compare:dt1] == NSOrderedAscending) { 
    NSLog(@"Date is earlier than date2"); 
    [postsToBeDeleted addObject: textmessage]; 

} else { 
    NSLog(@"dates are the same"); 
} 

的NSLog的給我:

DATE CURRENT: 2013-02-05 21:37:54 +0000 DATE 2 2012-01-04 23:00:00 +0000 

但它是絕對清楚的是,當前的日期是遠遠領先於DT1的日期,仍然我得到NSLog(@「日期晚於date2」);.爲什麼是這樣?

+0

請注意,該行'NSDate * Date = [NSDate date];'沒有必要(並且沒有ARC泄漏)。做'NSDate * dt1 = [df dateFromString:TheDate];'代替。 – vikingosegundo

+0

好吧,爲了得到當前日期,所以我不需要做NSDate * Date = [NSDate date] – user2014474

+0

對不起,我複製了錯誤的行'NSDate * dt1 = [df dateFromString:TheDate];''而不是' NSDate * dt1 = [[NSDate alloc] init]; dt1 = [df dateFromString:TheDate];' – vikingosegundo

回答

2

由於-compare:適用於NSDate實例。該docs說:

如果:

  • 接收器和anotherDate是完全相等,NSOrderedSame
  • 接收器以後是在時間上比anotherDate,NSOrderedDescending
  • 接收機較早在時間上比另一個日子,NSOrderedAscending。

在這種情況下,接收器是Date,而anotherDate是你dt1Date晚於dt1,因此您獲得NSOrderedDescending。 (這實際上是你的日誌報表暗示的情況;我在何處的困惑是有點不確定的。)

+0

所以,我怎樣才能比較時間,但實際日期?日月年?如果我理解正確NSOrdered ...指的是時間而不是日期? – user2014474

+0

@ user2014474,可以在同一時間創建日期,也可以不創建日期組成部分 – vikingosegundo

+0

那我該怎麼做? – user2014474

0

請讓我引用你一些有趣的事情:

如果:

  • 接收機和anotherDate是完全彼此相等,NSOrderedSame
  • 接收機以後是在時間上比anotherDate,NSOrderedDescending
  • 接收器比另一個日期,NSOrderedAscending更早。