1

我正在尝试获取两个 NSDates 之间的时间差。

NSDate *d1 = somedate;
NSDate *d2 = someOtherdate;
NSTimeInterval sec = [d2 timeIntervalSinceDate:d1];

NSTimeInterval 的准确度如何?它是否考虑到一个月中天数的变化,例如天数是 28、29、30 或 31?还有时区差异?

4

4 回答 4

3

NSTimeInterval实际上只是一个 typedefed double。因为NSDate表示单个时间点(与时区、日历等无关),NSTimeInterval表示两个日期(时间点)之间的秒数。

于 2013-03-29T04:48:56.837 回答
3

准确度如何NSTimeInterval

在我知道他们有 Cocoa 的平台上,NSTimeInterval类型定义为double,

它是否考虑到一个月中天数的变化?

不是NSTimeInterval那样做的,它是一种类型。NSDate处理所有这些偏差的是各种类( ,等等)。他们做得很好。

于 2013-03-29T04:53:07.883 回答
2

NSTimeInterval实际上只是double.

NSDate封装了一个时间间隔,并提供了一个与之交互的接口。

如果您希望将该日期引用到我们的实际日历中,则必须使用NSCalendarNSDateComponents类。

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];

然后你可以从组件对象中获取数据:

components.day
components.week
// etc

假设玛雅文化从未灭绝。这个正确的时刻将由相同的 NSDate 对象表示,但通过不同的NSCalendar(如 a NSMayanCalendar),您将获得该日期的完全不同的表示。

于 2013-03-29T04:56:51.570 回答
1

NSTimeInterval 的准确度如何?

它精确到毫秒(如果不是更多)。

它是否考虑到一个月中天数的变化,例如天数是 28、29、30 或 31?

是的,差异将以秒为单位。NSDate处理一个月中的实际天数以及闰年和夏令时等。

还有时区差异?

NSDate值始终以 UTC 格式存储,因此您的NSDate对象始终位于同一时区。没有什么可处理的。

于 2013-03-29T05:17:37.563 回答