首页 > 解决方案 > 是 timeIntervalBetween1970AndReferenceDate + timeIntervalSinceReferenceDate = timeIntervalSince1970

问题描述

我正在浏览一段代码,偶然发现了 and 的timeIntervalBetween1970AndReferenceDate用法timeIntervalSinceReferenceDate

代码以毫秒为单位返回时间戳:

return (Date.timeIntervalBetween1970AndReferenceDate + date.timeIntervalSinceReferenceDate) * 1000

这不等同于:

return date.timeIntervalSince1970 * 1000

标签: swiftdate

解决方案


确实,没有区别。Date具有类型属性

public static let timeIntervalBetween1970AndReferenceDate: TimeInterval
// The number of seconds from 1 January 1970 to the reference date, 1 January 2001

和实例属性

public var timeIntervalSinceReferenceDate: TimeInterval { get }
// The interval between the date value and 00:00:00 UTC on 1 January 2001.

public var timeIntervalSince1970: TimeInterval { get }
// The interval between the date value and 00:00:00 UTC on 1 January 1970.

这意味着对于任何date类型Date的值,身份

Date.timeIntervalBetween1970AndReferenceDate + date.timeIntervalSinceReferenceDate
     == date.timeIntervalSince1970

持有。事实上,正如我们在 Date.swift#L111中看到的那样,timeIntervalSince1970实现为

public var timeIntervalSince1970: TimeInterval {
    return self.timeIntervalSinceReferenceDate + Date.timeIntervalBetween1970AndReferenceDate
}

推荐阅读