Date
是日期和时间处理的基础类。在iOS内部,时间以从 2001年1月1日00:00 UTC 的秒数,作为绝对值存储,Date
对此进行封装,并提供相关方法。
世界各地的在同一个时刻,你可以认为是同一个物体(除非出现了一个新的星球时间系统)。但是附加上各地不同的表述和计算方式,时间就变得略微复杂。
绝对时间一种通俗的概念:在美国的 A 正在跟在迪拜的 B 进行通电话,这个时刻就可以称为绝对时间;在同一时刻都会有这样的通话,但是由于时区、不用的日历以及不同的字母或符号方法,区域时间就可能不一样。
基础库还支持处理不同的日历体系的 Calendar
日历实例;
在处理跨时区、日历种类和区域的时间转换的时候,都会遇到一些棘手的问题。SwiftDate能够帮你更高效的解决这些问题。
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
时间实例。
当你使用普通的Date
对象,你可以在Date.defaultRegion
中定义的DateInRegion,这个地区包含了:
- .timeZone 以 GMT (Greenwich Mean Time)格式表述的时区
- .local 以设备的所在地设置日期表述方式
- .Calendar 设置为设备默认的日历
您可以调用 Date.setDefaultRegion(:)
以改变时间的默认地区 Date.defaultRegion
。
这个或许不太重要但还是要记住:时间的这些需要在应用启动时设置好(例如,在UIApplication的delegate中函数applicationDidFinishLaunching()
中设置就行了)。