我们知道 NSDate 是 UTC/GMT。换句话说,没有时区信息与之相关联。
有一些高级类,例如 NSCalendar 和 NSTimeZone 和 NSDateComponents,它们确实考虑了时区。
基于此,我使用以下代码来计算两个日期之间的天数差异。然而,我得到的结果似乎是计算完成时完全忽略了时间。我想知道我是否做错了什么,或者这是出于某种原因设计的。
这是代码和数据:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comp = [calendar components:NSDayCalendarUnit fromDate:startDate toDate:stopDate options:0];
NSInteger day = [comp day];
调试输出:
(gdb) po startDate
2011-04-01 03:52:13 +0000
(gdb) po stopDate
2011-04-03 15:52:13 +0000
(gdb) p (int) day
$1 = 2
时区是太平洋标准时间,上面转换为 PST 的日期是:
startDate = 2011-03-31 8:52:13 -7
stopDate = 2011-04-03 8:52:13 -7
因此,我希望他们之间有 4 天,而不是 2 天。(第 31 天、第 1 天、第 2 天和第 3 天)
我认为小时数被忽略的原因是,如果将小时数添加到计算中,我们会得到 2 天 12 小时。
我做错了什么还是这是设计的工作方式?
谢谢你,万斯