2015-02-10 106 views
-1

下面是代码,这给我带来了一些问题:的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 

有什么可以测试失败的原因是什么?

+1

尝试使用'XCTAssertEqualWithAccuracy' – Berendschot 2015-02-10 13:10:06

+0

@ Maarten1909即时将使用我的代码以外的测试。如何解决比较失败呢? – 2015-02-10 13:13:56

+0

只是两个NSDates之间的定期比较? – Berendschot 2015-02-10 13:17:52

回答

0

你比较双倍的,所以你不能简单地检查平等。两个实例输出相同的输出并不意味着什么,因为默认输出格式的精度为1秒。

做这样的事情比较它们:

if (fabs(t1 - t2) < delta) 

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

或者,您可以设置日期,你不需要0较高的精密部件使用NSDateComponents之前比较它们

1

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

(您可以直接与NSDates通过添加/上的日期减去三角洲做到这一点,但它的混乱,我懒得写出来。)