在这里感到困惑......我有两个日期,我在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");
}
答案 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]
来提供从dateXML
到dateUSERPREFS
的(签名)秒数。
答案 1 :(得分:2)
我会执行以下操作:从另一个中减去一个日期并检查该值是多于还是小于零。那会告诉你哪个更大:
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:
可以提供更直观的逻辑)