NSDate 比较失败

NSDate comparison fails

这是代码,给我带来了一些问题:

    NSDate * d1 = [NSDate dateWithTimeIntervalSinceReferenceDate:444555883.659000];
    NSTimeInterval since1970 = [d1 timeIntervalSince1970];
    NSDate * d2 = [NSDate dateWithTimeIntervalSince1970:since1970];

    NSLog(@"%@\n%@", d1, d2);
    NSLog(@"%d", [d1 compare: d2] == NSOrderedSame);

我无法理解的问题是测试失败并显示以下日志:

2015-02-02 07:44:43 +0000
2015-02-02 07:44:43 +0000

0 // test failed

测试失败可能是什么原因?

if (interval1 + delta > interval2 && interval1 - delta < interval2)

(你可以直接用 NSDates 做 adding/subtracting delta on the dates,但是比较乱,我懒得写出来。)

您正在比较双精度值,因此您不能简单地检查是否相等。两个实例打印出相同输出的事实并不意味着什么,因为默认输出格式的精度为 1 秒。

通过做这样的事情来比较它们:

if (fabs(t1 - t2) < delta)

其中 delta 是非常小的量,例如 0.005

或者您可以在比较它们之前使用 NSDateComponents 将不需要的日期的更高精度组件设置为 0