NSDate.timeIntervalSinceDate 没有节时调整?

Posted

技术标签:

【中文标题】NSDate.timeIntervalSinceDate 没有节时调整?【英文标题】:NSDate.timeIntervalSinceDate without day time saving adjustments? 【发布时间】:2015-10-16 20:37:21 【问题描述】:

当我比较 10 月 25 日的开始和结束时,我得到 89999 秒(25 小时)。

我使用以下方法比较日期:

endOfDay.timeIntervalSinceDate(startOfDay)

但是,当我比较小时数时,我得到 24。 我使用 NSDate 的以下扩展功能来比较小时。:

 func differenceInHoursWith(date: NSDate) -> Int
        let components = NSCalendar.currentCalendar().components(.Hour, fromDate: self, toDate: date, options: [])
        return components.hour
    

有没有办法在不调整白天时间的情况下以秒为单位获得差异?就我而言,我不需要它们,我需要秒粒度。

【问题讨论】:

由于美国在该日期将时钟拨回一小时,因此 25 小时是正确的。如果结果是 24 小时,那就少了一小时。实际上就是这么多秒。 是的,它是正确的,但对于我的应用程序,我想忽略日光计算。 这不是“计算”或“调整”,这两个时间实际上相隔 25 小时。例如,如果您在开始时间开始数秒,则任何准确的时钟都需要 25 小时才能到达结束时间。该框架不是在做一些神秘的计算,而是给你一个字面上准确的结果。 汤姆 我并不是说这是错误的。我的观点是,如果您查看 25 日的任何日历,它仍然是从 0 小时到 24 小时。为了显示它们,我需要将所有事件的开始和结束日期转换为转换为当天时间线的图形点。我知道我可以使用 GMT 区域创建一个新的 NSCalendar 实例,它会给我我想要的东西。我只是想知道是否有其他方法。我目前只是通过小时+分钟+秒来增加秒数。我认为这对我来说是最简单的解决方案。 【参考方案1】:

一小时有 3600 秒,因此您可以将秒数除以 3600。下面是一个实现方法:

func differenceInHoursWith(date: NSDate) -> Int 
    let seconds = self.timeIntervalSinceDate(date)
    return Int(seconds / 3600)

如果你想要差的绝对值,你可以这样做:

func differenceInHoursWith(date: NSDate) -> Int 
    let seconds = self.timeIntervalSinceDate(date)
    let hours = Int(seconds / 3600)
    return abs(hours)

【讨论】:

以上是关于NSDate.timeIntervalSinceDate 没有节时调整?的主要内容,如果未能解决你的问题,请参考以下文章