比较NSDate对象

时间:2011-11-17 10:18:09

标签: objective-c unit-testing core-data nsdate

我有一个使用CoreData的应用程序。其中一个实体包含date属性,即......日期。我正在编写一个测试来检查传递给该实体类的类方法的时间戳是否正在转换为正确的NSDate

这是我的测试代码:

NSDate *now = [NSDate date];
NSTimeInterval ts = [now timeIntervalSince1970];
// paramDict is a dictionary with attributes and values
[paramDict setValue:[NSNumber numberWithDouble:ts] forKey:@"date"];

MyEntity *myEntity = [MyEntity entityWithAttributes:paramDict inContext:testMOContext];

STAssertTrue([now isEqualToDate:[myEntity date]], @"dates were not equal");

这只是整个测试的片段,它检查所有参数是否设置正确。有趣的是日期断言检查随机失败。我认为失败与双浮点精度的损失有关?我应该如何在这种情况下检查日期?

更新

时间戳在以下方法中转换为日期:

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[[paramDict valueForKey:@"date"] doubleValue]];
[newObject setDate:date];

2 个答案:

答案 0 :(得分:3)

您可以使用

计算 now 日期与 myEntity 日期之间的差异
NSTimeInterval difference = fabs([[myEntity date] timeIntervalSinceDate:now]);

并将结果与​​阈值进行比较(例如,1秒)。如果差异小于1秒,请将两个日期视为相同。

来自NSDate( isEqualToDate )的文档:

  

此方法检测日期之间的亚秒差异。如果要比较精细度较小的日期,请使用timeIntervalSinceDate:来比较两个日期。

答案 1 :(得分:0)

isEqualToDate比较NSDate个对象,但您的date属性似乎是一个时间间隔?我建议使用属性的日期类型,并坚持使用NSDate