时间的表示和创建
时间是什么? 维基百科说,时间是一种尺度,在物理定义上是标量,藉着时间,时间发生之先后可以按过去-现在-未来之序列得以确定(时间点/时刻),也可以衡量事件持续的期间以及事件之间和间隔长短(时间段)。
这个解释让时间包含了两种含义,一是时间点,代表了一维时间物理量上的一个点;二是时间段,代表了有始有终的一个时间间隔。
时间点或者时刻,就是我们平常说的几年几月几日几时几分几秒。 我们要说一个事件的发生时刻,就用的的是时间点。比如,买的火车票是明天下午五点半开,这个五点半就是时间点。Swift在基础库Foundation中提供了对应时间点的结构体:Date。
请注意,Date代表了纯粹的时间点概念,即只是代表漫漫时间长河上的一个时刻,本身并不包含年月日时分秒这些概念,所以它是独立于任何一个特定的日历(calendar)系统的。
确定任何一个物理量,都需要参照点,时间也是一样。为了初始化一个Date,也就是一个绝对时间点,我们必须明确两个物理量:时间参照点,以及与参照点的关系。
物理坐标 = 参照点 + 与参照点的关系
因为时间是一维尺度的物理量,与参照点的关系容易表示,只需要距离值就可以。正值表示在参照时间点之后,负值表示在参照时间点之前。又因为时间的基本国际单位是秒,所在Date中表示时间距离值的单位是秒。总结起来,与参照点的关系可以用用秒计时的数值表示。
有了关系表示,只需要再提供参考点,Date就能表示一个绝对的时间点。
Date提供了以下几种参照时间点用以构造自己:
- 当前时间
init()
init(timeIntervalSinceNow: TimeInterval) ’‘’
- 任意另一个时间点
init(timeInterval: TimeInterval, since: Date)
- 标准参照时间点(2001年1月1日凌晨0点)
init(timeIntervalSinceReferenceDate: TimeInterval)
- 传统参照时间点(1970年1月1日凌晨0点)
init(timeIntervalSince1970: TimeInterval)
其中TimeInterval是整形变量的别称,代表了以秒作为单位的相对时间距离。
另外, Date还提供以下了三个类型属性或方法(Type Property/Methods)来方便库用户的使用。类型属性/方法是直接用类型的名字引用的方法,不是用类型的实例引用。类型方法需要在前面放置static 关键词。
- 获取当前时间
static var now: Date
- 表示遥远的未来
static let distantFuture: Date
- 表示遥远的过去
static let distantPast: Date
总结如下:
- Date为我们表示时间点提供了方法。英语中Date有日期(日)的概念,请不要混淆,在swift foundation库中的Date代表的是时间点(感觉用Time更合适一点)。
- 用参照时间点和相对关系就能够代表任何Date时刻。Date的几种初始函数也正是用参照点和相对时间距离在进行构造新的Date实例。
- 使用类型方法distantFuture或者distantPast可以方便的获取未来和过去的概念,以进行时间的比较。
