我正在尝试在Swift 2中学习NSDate
课程。
我发现每个NSDate对象都有三个属性:
对我来说有点困惑。虽然我知道它们代表的是秒数,但我无法理解它们的解释。
我做了这段代码:
let whatISThis = NSDate(timeIntervalSinceReferenceDate: NSTimeInterval(60))
好的,我有约会,但那是什么?这三个属性之间有什么区别?
答案 0 :(得分:33)
timeIntervalSinceReferenceDate
是2001年1月1日以来的秒数:凌晨12:00(深夜)
timeIntervalSince1970
是自1970年1月1日上午12:00(午夜)以来的秒数
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
答案 1 :(得分:6)
威廉很好地解释了初始化者之间的区别。 (投票)
NSDate还有一些属性,可让您通知日期以返回时间间隔。我会在一分钟内谈论这些。
首先是一个小背景:timeIntervalSince1970
和timeIntervalSinceReferenceDate
方法使用不同的"纪元日期"或日期被视为"零日期" (数值为零的日期)。
timeIntervalSince1970
使用UNIX中标准的纪元日期:1970年1月1日格林威治标准时间午夜。这也是互联网上日期的标准纪元日期。
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方法可能是个例外。
答案 2 :(得分:0)
您可以在日期对象之间找到时间间隔
- timeIntervalSinceDate:
这三个属性是与其他便利日期对象找到相同内容的快捷方式。
timeIntervalSince1970
- 1970年1月1日格林尼治标准时间中午12:00。timeIntervalSinceReferenceDate
- 2001年1月1日,格林尼治标准时间中午12:00。timeIntervalSinceNow
- 当前日期和时间。