【问题标题】:Can't compare two NSDates无法比较两个 NSDate
【发布时间】:2012-04-11 05:05:38
【问题描述】:

在这里感到困惑......我有两个日期,我 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");
}

【问题讨论】:

    标签: objective-c ios nsdate


    【解决方案1】:

    [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。或者 timeIntervalSinceDate: 给你以秒为单位的差异(如果接收者更早,则为负数)。
    • 非常感谢。如果这两个日期彼此相等怎么办?
    【解决方案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
    }
    

    【讨论】:

      【解决方案3】:

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

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

      - (NSComparisonResult)compare:(NSDate *)anotherDate
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-09
        • 1970-01-01
        • 1970-01-01
        • 2012-05-07
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多