NSDate(Date)使用总结

04. 九月 2017 iOS 0

最近有做两个App(五分钟日记FriedatMemo),都牵扯到时间日期相关的需要,也稍微的研究下,其实NSDate并不是那么简单(网上也没有人就这一个小点拉出来溜溜)。

🌟 本文以Swift3.1作为语言讨论。Swift中我们以Date作为研究对象,代码中可以直接as NSDate来转换为NSDate。在定义中,Date是ReferenceConvertible的,他的ReferenceType被指为NSDate(其实意思就是Date是Foundation中的NSDate的一个装饰)

1.官方API

首先,我们研究的是Swift中的Date,Date在里面是Struct(结构体),也就代表了是一个值类型,=代表了拷贝,熟悉官方API的可以跳过这一节。

  1. timeIntervalBetween1970AndReferenceDate: 返回从1970年1月1号,到2001年1月1号的时间,秒为单位。
  2. timeIntervalSinceReferenceDate : 返回从2001年1月1号 0点到现在的时间,秒为单位
  3. init: 返回值为Date,这个值是当前的时间(创建Date的时间)
  4. init(timeIntervalSinceNow: TimeInterval): 返回一个Date,距离现在多少秒后的时间
  5. init(timeIntervalSince1970: TimeInterval): 返回一个Date,距离1970.1.1号多少秒之后的时间
  6. init(timeInterval: TimeInterval, since date: Date): 在一个日期后的多少秒是什么日期
  7. init(timeIntervalSinceReferenceDate ti: TimeInterval): 2001年1月1号之后多少秒是什么日期
  8. timeIntervalSinceReferenceDate: 这个日期距离2001年1月1号是多少秒
  9. timeIntervalSince: 两个日期间的距离是多少秒
  10. timeIntervalSinceNow: 距离当前的时间是多少秒
  11. timeIntervalSince1970: 距离1970年1月1号的时间是多少秒
  12. addingTimeInterval: 返回一个新的日期,在当前日期添加多少秒
  13. addTimeInterval: 给当前的日期添加多少秒
  14. distantFuture: 返回一个遥远的未来,以世纪计算
  15. distantPast: 返回一个遥远的过去,以世纪计算
  16. ==, < , > ,+ ,- , +=, -=: 定义了一些符号方法

2.对Date的扩展

因为从官方的API来看,对Date的生成其实是不友好的,比如我需要一个特定的日期,是没有办法直接生成的,等等。下来我们来拓展一些常用的方法,及动态属性。

获取扩展

当我们需要将一个日期进行拆解,获取它的各个component,我们需要借助一个类Calendar,这个类可以帮我们去把这个Date,放在一个真的日历中,让我们可以理解它在日历中的位置,以及一些其他的属性。不在这里讨论具体的方法,我们只用其来扩展Date

这个方法就可以从当前的date中获取任何一个date的组成。比如,年份,月份,日期,星期等等, 例如let weekDay = self.getComponet(.weekday) 就可以获取到星期

自定义创建日期

这里就需要用到另一个类DateComponents, 所以我们可以看到,其实关于日期的复杂,以及官方API的散乱。我们再给这里加上一个扩展类静态方法

这个方法就可以调用Date.formatDate来创建了。

日期的文本输出

当我们需要将当前的日期来显示输出给用户,则需要显示的本地化这些时间,需要用到类DateFormatter,那么我们来扩展这个方法到Date

3.总结

与Date相关的类基本上应该就是上面几类,基本上按照上面的扩展还可以扩展出更好用的函数,假如说要做全球化,时间的timezone一定需要注意。这篇感觉有些滑水,下篇会加油的。

编程是种思想


发表评论