NSDate比较失败

时间:2015-02-10 13:03:22

标签: ios nsdate

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

    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

测试失败的原因是什么?

2 个答案:

答案 0 :(得分:1)

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

(您可以通过在日期添加/减去delta来直接使用NSDates,但它太麻烦了,我也懒得把它写出来。)

答案 1 :(得分:0)

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

通过这样做来比较它们:

if (fabs(t1 - t2) < delta)

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

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