我正在阅读一本关于 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;