Date 和 Absolute Time

Date是日期和时间处理的基础类。在iOS内部,时间以从 2001年1月1日00:00 UTC 的秒数,作为绝对值存储,Date对此进行封装,并提供相关方法。

世界各地的在同一个时刻,你可以认为是同一个物体(除非出现了一个新的星球时间系统)。但是附加上各地不同的表述和计算方式,时间就变得略微复杂。

绝对时间一种通俗的概念:在美国的 A 正在跟在迪拜的 B 进行通电话,这个时刻就可以称为绝对时间;在同一时刻都会有这样的通话,但是由于时区、不用的日历以及不同的字母或符号方法,区域时间就可能不一样。

基础库还支持处理不同的日历体系的 Calendar 日历实例;

在处理跨时区、日历种类和区域的时间转换的时候,都会遇到一些棘手的问题。SwiftDate能够帮你更高效的解决这些问题。

DateInRegion 和 Region

SwiftDate 为了提供完整的时间和日期管理的功能,引入了两个重要的新玩意以及数个扩展。

第一个是一个结构体(struct),称为Region:region,正如其名称,它是对一个地理位置在时间体系中的描述,其中包含三个不同的特征:

这或许是不太重要的标注说明:

GMT(Greenwich Mean Time):指格林威治标准时间;

PST(Pacific Standard Time):指太平洋标准时间;

  • TimeZone: 用来定义时区。时区在一定程度上表示了不同地区,因此,地区的名字的可作为时区的名称,例如夏威夷时区,北京时间。类似的,格林尼治时间(GMT)或美国西部时间(PST)的偏移量, 也可以用来表示时区,例如东八区(GMT +8)

  • Calendar: 用来表示日历体系,日历体系定义了年与月的长度与划分。SwiftDate 提供了不同日历的信息,还支持不同日历下时间的计算,例如给出绝对时间值,SwiftDate 可以确定他在指定日历系统下的日期。

  • local: 用来表示当地的时间表述方式。由于各地的文化、语言、规范的不同,时间在各地用不同的分隔符或语法来表示。比如 中国地区一般采用 年-月-日 时:分:表,而美国地区多采用 月-日-年 时:分:秒

另一个是DateInRegion,是在特定的国家地区 Region 下,描述一个自身与具体时区和日历无关的时间Date。这是由于特定的国家地区一般采用固定的时区、日历系统与表述规范,只要声明了国家地区,就包含了以上三个要素。实际应用中,使用DateInRegion可以方便的操作上下文中的日期。

SwiftDate 为您提供相同的函数和属性,以管理带有地区属性的DateInRegion时间实例 和 单纯Date时间实例。

默认Region

当你使用普通的Date对象,你可以在Date.defaultRegion中定义的DateInRegion,这个地区包含了:

  • .timeZone 以 GMT (Greenwich Mean Time)格式表述的时区
  • .local 以设备的所在地设置日期表述方式
  • .Calendar 设置为设备默认的日历

您可以调用 Date.setDefaultRegion(:) 以改变时间的默认地区 Date.defaultRegion

这个或许不太重要但还是要记住:时间的这些需要在应用启动时设置好(例如,在UIApplication的delegate中函数applicationDidFinishLaunching()中设置就行了)。