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