2012-03-27 143 views
0

这里困惑......我有两个日期,我的NSLog安慰并获得其中: 日期为2011-03-30 13:33:57 +0000 - 2011-03-28 13:33:57 +0000不能比较两个NSDates

一个日期显然晚于其他...然而,在代码低于它不要紧,如果我使用[dateUSERPREFS laterDate:dateXML][dateUSERPREFS earlierDate:dateXML]我得到“我们得到第一中频”显示在控制台?

任何想法?谢谢,

NSDate *dateXML = [df dateFromString:last_modifiedXML]; 
NSDate *dateUSERPREFS = [df dateFromString:last_modifiedUSERPREFS]; 

NSLog(@"dates are %@ - %@", dateXML, dateUSERPREFS); 

if ([dateUSERPREFS laterDate:dateXML]) {   
    NSLog(@"we get first IF"); 
} 

回答

12

[aDate laterDate:anotherDate]返回一个NSDate,而不是一个BOOL。具体来说,它返回两个日期中较晚的日期。

你想用compare:代替:

NSComparisonResult comparisonResult = [dateUSERPREFS compare:dateXML]; 
if (comparisonResult == NSOrderedAscending) { 
    // case where dateUSERPREFS is before dateXML 
} else if (comparisonResult == NSOrderedSame) { 
    // both dates are the same 
} else if (comparisonResult == NSOrderedDescending) { 
    // this could have just been a plain else; dateUSERPrefs after dateXML 
} 

或者,你可以使用[dateUSERPREFS timeIntervalSinceDate:dateXML]它给你的(签名)dateXMLdateUSERPREFS秒数。

+1

+1。或者timeIntervalSinceDate:以秒为单位给出差异(如果接收者较早,则为负值)。 – danh 2012-03-27 16:16:44

+0

非常感谢。如果这两个日期虽然彼此相等,但是呢? – sayguh 2012-03-27 16:17:46

+0

查看我的更新回答 – yuji 2012-03-27 16:21:20

1

-[NSDate laterDate:]返回NSDate *不是BOOL,而这不会是Null,所以条件将永远是正确的。

尝试-[NSDate compare:]其中有签名:

- (NSComparisonResult)compare:(NSDate *)anotherDate 

然后,您可以在您的if条件,这是我相信你正在努力实现在你的问题的代码有什么比较NSComparisonResult

(当然,你可以继续使用laterDate:,只是比较原始对象的平等,但我觉得compare:让更多的直观的逻辑)