无法比较两个NSDates

时间:2012-03-27 16:08:36

标签: objective-c ios nsdate

在这里感到困惑......我有两个日期,我在NSLog控制台并得到: 日期为2011-03-30 13:33:57 +0000 - 2011-03-28 13:33:57 +0000

一个日期明显晚于另一个......但是,在下面的代码中,如果我使用[dateUSERPREFS laterDate:dateXML][dateUSERPREFS earlierDate:dateXML]并不重要我得到“我们得到第一个IF”显示在控制台?

有什么想法吗?谢谢,

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");
}

3 个答案:

答案 0 :(得分: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 :(得分:2)

In the documentation, Apple says that laterDate returns the later of the two dates, not a BOOL statement.

我会执行以下操作:从另一个中减去一个日期并检查该值是多于还是小于零。那会告诉你哪个更大:

if ([dateXML timeIntervalSinceDate:dateUSERPREFS] > 0) {
    //Now you know that dateXML is larger than dateUSERPREFS
}

答案 2 :(得分:1)

-[NSDate laterDate:]返回NSDate *而不是BOOL,这不会是Null,因此条件将始终为真。

尝试具有签名的-[NSDate compare:]

- (NSComparisonResult)compare:(NSDate *)anotherDate

然后,您可以比较if条件中的NSComparisonResult,我相信您尝试使用问题中的代码实现的目标。

(当然,您可以继续使用laterDate:并只比较与原始对象的相等性,但我觉得compare:可以提供更直观的逻辑)