细品Swift:关乎时间的一切(1)

时间的表示和创建

时间是什么? 维基百科说,时间是一种尺度,在物理定义上是标量,藉着时间,时间发生之先后可以按过去-现在-未来之序列得以确定(时间点/时刻),也可以衡量事件持续的期间以及事件之间和间隔长短(时间段)。

这个解释让时间包含了两种含义,一是时间点,代表了一维时间物理量上的一个点;二是时间段,代表了有始有终的一个时间间隔。

时间点或者时刻,就是我们平常说的几年几月几日几时几分几秒。 我们要说一个事件的发生时刻,就用的的是时间点。比如,买的火车票是明天下午五点半开,这个五点半就是时间点。Swift在基础库Foundation中提供了对应时间点的结构体:Date。

请注意,Date代表了纯粹的时间点概念,即只是代表漫漫时间长河上的一个时刻,本身并不包含年月日时分秒这些概念,所以它是独立于任何一个特定的日历(calendar)系统的。

确定任何一个物理量,都需要参照点,时间也是一样。为了初始化一个Date,也就是一个绝对时间点,我们必须明确两个物理量:时间参照点,以及与参照点的关系。

物理坐标 = 参照点 + 与参照点的关系

因为时间是一维尺度的物理量,与参照点的关系容易表示,只需要距离值就可以。正值表示在参照时间点之后,负值表示在参照时间点之前。又因为时间的基本国际单位是秒,所在Date中表示时间距离值的单位是秒。总结起来,与参照点的关系可以用用秒计时的数值表示。

有了关系表示,只需要再提供参考点,Date就能表示一个绝对的时间点。

Date提供了以下几种参照时间点用以构造自己:

  1. 当前时间
init()
init(timeIntervalSinceNow: TimeInterval) ’‘’
  1. 任意另一个时间点
init(timeInterval: TimeInterval, since: Date)
  1. 标准参照时间点(2001年1月1日凌晨0点)
init(timeIntervalSinceReferenceDate: TimeInterval)
  1. 传统参照时间点(1970年1月1日凌晨0点)
init(timeIntervalSince1970: TimeInterval)

其中TimeInterval是整形变量的别称,代表了以秒作为单位的相对时间距离。

另外, Date还提供以下了三个类型属性或方法(Type Property/Methods)来方便库用户的使用。类型属性/方法是直接用类型的名字引用的方法,不是用类型的实例引用。类型方法需要在前面放置static 关键词。

  1. 获取当前时间
static var now: Date
  1. 表示遥远的未来
static let distantFuture: Date
  1. 表示遥远的过去
static let distantPast: Date

总结如下:

  1. Date为我们表示时间点提供了方法。英语中Date有日期(日)的概念,请不要混淆,在swift foundation库中的Date代表的是时间点(感觉用Time更合适一点)。
  2. 用参照时间点和相对关系就能够代表任何Date时刻。Date的几种初始函数也正是用参照点和相对时间距离在进行构造新的Date实例。
  3. 使用类型方法distantFuture或者distantPast可以方便的获取未来和过去的概念,以进行时间的比较。
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简述相关分析和回归分析的区别和联系。 回归分析和相关分析都是研究两个或两个以上变量之间关系的方法。 广义上说...
    安也也阅读 12,891评论 0 3
  • 你参加了一个电视闯关节目,幸运地闯过第一关,如果现在停下来,你可以拿到3000美元(乘以汇率7大概21000元人民...
    花儿笑2016阅读 11,052评论 0 4
  • 时间(date time)应该是一个精确的点,以便能够进行比较。但是如何能让他成为一个精确的点呢?一般的,如果需要...
    远程板砖阅读 5,851评论 1 8
  • 你扔掉手表,你尝试理解,这看似能抓住的时间,只不过是指针的运动…… -Grateful Dead《Walk in ...
    FanlyLee阅读 4,099评论 0 5
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 8,743评论 0 6