【问题标题】:NSDateComponents vs timeIntervalSinceNSDateComponents 与 timeIntervalSince
【发布时间】:2014-06-26 18:01:45
【问题描述】:

我正在尝试计算从一个日期到另一个日期的天数,并找到了两种方法。

第一个使用NSDateComponents如下:

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit
                                                    fromDate:date1
                                                      toDate:date2
                                                     options:0];

然后检查[组件日]。

第二个使用timeInterval:

    NSInteger timeInterval = [date2 timeIntervalSinceDate:date1];

然后得到 timeInterval/3600/24

一种方法比另一种更好吗(可能是因为 timeInterval 方法缺乏精度)?

谢谢!

【问题讨论】:

    标签: ios objective-c nsdate nstimeinterval


    【解决方案1】:

    使用 dateComponent 比通过假设 timeInterval/3600/24 来操纵自己要好得多。

    原因:

    1. 所有的日子都没有 60*60*24 秒!!!

    2. 从夏令时过渡时,一天可以有 23 或 25 小时。

    小时(常用符号:h 或 hr)是时间的计量单位。在 现代用法,一小时包括 60 分钟,或 3,600 秒。它是 大约是平均太阳日的 1/24。

    世界协调时间 (UTC) 时间标准中的一个小时可以 包括一个负或正闰秒,因此可能有一个 用于调整目的的持续时间为 3,599 或 3,601 秒。

    来源:Wikipedia Hour

    【讨论】:

    • 闰秒不是你应该使用NSDateComponents的原因,因为Unix时间不计算闰秒。 Unix 时间数字每小时增加 3600。 - 真正的原因是夏令时的转换,一天可能有 23 或 25 小时。
    • 感谢你们!关于 DST。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2011-10-02
    • 2012-04-06
    • 1970-01-01
    相关资源
    最近更新 更多