2015-02-10 109 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通過添加/上的日期減去三角洲做到這一點,但它的混亂,我懶得寫出來。)