swift2 时间间隔自参考日期与时间间隔自1970年与时间间隔自现在

ukqbszuj  于 2022-11-06  发布在  Swift
关注(0)|答案(3)|浏览(255)

我正在学习Swift 2中的NSDate类。
我发现每个NSDate对象都有三个属性,分别是:
1.时间间隔自参考日期起
1.时间间隔自1970年
1.时间间隔从现在开始
对我来说有点困惑。我不明白它们的解释,虽然我知道它们代表秒。
我做了这个代码:

let whatISThis = NSDate(timeIntervalSinceReferenceDate: NSTimeInterval(60))

好吧,我有个约会,但那是什么?,这三个属性有什么区别?

lf3rwulv

lf3rwulv1#

timeIntervalSinceReferenceDate是自2001年1月1日以来的秒数:上午12:00(午夜)
timeIntervalSince1970是自1970年1月1日12:00 am(午夜)以来经过的秒数
timeIntervalSinceNow是从现在开始经过的秒数
我将列举这些例子:

let s0 = NSDate(timeIntervalSinceReferenceDate: NSTimeInterval(0)) // it means give me the time that happens after January,1st, 2001, 12:00 am by zero seconds
print("\(s0)") //2001-01-01 00:00:00

let s60 = NSDate(timeIntervalSinceReferenceDate: NSTimeInterval(60)) //it means give me the time that happens after January, 1st, 2001, 12:00 am by**60 seconds**
print("\(s60)") //2001-01-01 00:01:00

let s2 = NSDate(timeIntervalSince1970: NSTimeInterval(0)) // it means give me the time that happens after January, 1st, 1970 12:00 am by**zero**seconds
print("\(s2)") //1970-01-01 00:00:00

let s3 = NSDate() // it means the current time
print("\(s3)")//2015-10-25 14:12:40

let s4 = NSDate(timeIntervalSinceNow: NSTimeInterval(60)) //it means one minute (60 seconds) after the current time
print("\(s4)") //2015-10-25 14:13:40

let s5 = NSDate(timeIntervalSinceNow: NSTimeInterval(-60)) // it means one minute (60 seconds) before the current time
print("\(s5)") //2015-10-25 14:11:40

let sd = NSDate(timeIntervalSinceReferenceDate: NSTimeInterval(60)) // it means one minute after the reference time (January, 1st, 1970: 12:00 am)
print("\(sd)") //2001-01-01 00:01:00

当然,如果您有一个NSDate对象,您可以简单地将所有这些属性...

let sNow = NSDate()
sNow.timeIntervalSinceReferenceDate
sNow.timeIntervalSinceNow
sNow.timeIntervalSince1970
7gcisfzg

7gcisfzg2#

William很好地解释了初始化器之间的区别。(投票)
NSDate也有一些属性,可以让你请求一个日期来给予时间间隔,我稍后会讨论这些属性。
先讲一点背景:timeIntervalSince1970timeIntervalSinceReferenceDate方法使用不同的“纪元日期”,或被视为“零日期”(数值为零的日期)的日期。
timeIntervalSince1970使用UNIX中的标准纪元日期:格林威治标准时间1970年1月1日午夜。2这也是互联网上日期的标准纪元日期。
timeIntervalSinceReferenceDate使用Mac OS/iOS纪元日期:2001年1月1日午夜。您可以轻松地计算这两个参考日期之间的常数偏移量,并使用加法/减法在它们之间进行转换。
除了前面提到的init方法之外,NSDate还具有一些属性,这些属性可以为您提供一个值,该值表示自给定参考日期以来的秒数:

var timeIntervalSinceReferenceDate: NSTimeInterval
var timeIntervalSince1970: NSTimeInterval

这很容易让人混淆,因为属性的名称和init方法的名称在Swift中看起来是一样的,而在Objective-C中,init方法的名称要更清楚一些:

+ (instancetype _Nonnull)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)seconds

+ (instancetype _Nonnull)dateWithTimeIntervalSince1970:(NSTimeInterval)seconds

通常我发现Swift的方法命名比Objective-C的方法命名要干净,但init方法可能是个例外。

t5fffqht

t5fffqht3#

您可以使用查找日期对象之间的时间间隔
timeIntervalSince1970
这三个属性都是快捷方式,可以方便地找到与其他日期对象相同的内容。

  1. timeIntervalSince1970-格林威治标准时间1970年1月1日上午12:00。
  2. timeIntervalSinceReferenceDate-2001年1月1日,格林威治标准时间上午12:00。
  3. timeIntervalSinceNow-当前日期和时间。

相关问题