0

我正在阅读一本关于 Objective-C 的书,我正在做一个练习,以向 NSDate 类添加一个名为 elapsedDays 的类别,该类别返回两个日期之间经过的天数。这是我的尝试:

-(unsigned long) elapsedDays: (NSDate *) theDate{

return ([self timeIntervalSinceDate:theDate]/3600)/24;

}

这是我正在测试我的代码的程序的主要部分:

NSDate *now = [NSDate date];

NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(3600*24)];


NSLog(@"%@",now);
NSLog(@"%@",yesterday);

NSLog(@"%lu",([now elapsedDays:yesterday]));

问题是我的结果一直为零:

2012-09-22 19:28:24 +0000
2012-09-21 19:28:24 +0000
0

我发现除法[self timeIntervalSinceDate:theDate]/3600 是给 23.99972222222222。这很奇怪,因为它应该给我们 24,因为两个日期之间的差异只有一天,即 24 小时。我想了解为什么这段代码在两个日期之间给了我错误的秒数。

我用四舍五入的除法结果纠正了这一点,但仍然想了解哪里出了问题。

return round ([self timeIntervalSinceDate:theDate] / 3600) / 24;  
4

3 回答 3

1

NSDate *now = [NSDate date];

NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(3600*24)];

以上两条语句将依次执行。因此,您在 24 小时内获得 1 秒的差异。

于 2012-09-22T19:49:01.723 回答
0

不要自己计算日期;让NSCalendar为您完成。请参阅-components:fromDate:toDate:options:其他有用的方法。

了解浮点运算的固有局限性也很有帮助。例如,请参阅每个计算机科学家应该了解的关于浮点运算的知识

于 2012-09-23T00:08:52.193 回答
0

我认为 Yashavant 的回答可能是正确的。记录的字符串可能看起来相等,但基础日期对象可能会相差几毫秒。昨天尝试这样做,看看它是否解决了您的问题:

NSDate *yesterday = [NSDate dateWithTimeInterval:-86400 sinceDate:now];
于 2012-10-15T19:25:58.780 回答