![iOS开发:从零基础到精通](https://wfqqreader-1252317822.image.myqcloud.com/cover/796/26793796/b_26793796.jpg)
上QQ阅读APP看书,第一时间看更新
4.6 NSDate类
在开发中有时候会需要使用到日期或者时间,苹果公司也为开发者提供了一个日期类以供使用,这就是NSDate。NSDate对象用来表示一个具体的时间点,它存储的是世界标准时间,所以在使用的时候可能会需要根据不同的时区将时间转换为本地时间。
1.获取日期与时间
NSDate类中提供了date方法,用来获取当前标准时区的时间。在通常情况下,需要本时区的时间,例如,在中国就需要东八区的时间。因此,通常需要把标准时间转换成本地时间。下方的示例代码中演示了如何获取当前标准时间以及如何把标准时间转换为本地时间。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-T108_13054.jpg?sign=1738889306-ONfBUJ56QlNooZYbmcJoRdPfD0gVyqIN-0-c8d9aa3ffa439381df30ded0fbb9b7ca)
运行结果如图4-21所示,中国位于东八区和国际标准时间相差8个小时。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-P109_13186.jpg?sign=1738889306-zvhMp9FMC6o67xR8YbtNvGWcPhrrx4c9-0-46adfbde094b1b9ad8dae22170e2a863)
图4-21 运行结果
2.日期格式转换
默认情况下,通过NSDate获取的日期时间格式为:yyyy-MM-dd HH:mm:ss,有的人喜欢更换为其他形式的日期格式,比如人们更加习惯把日期显示为“2016年12月29日11:07:32”这种形式,此时,就需要借助NSDateFormatter类对日期格式进行转换。在使用NSDateFormatter类进行日期转换之前,需要设置日期的格式。设置时有如下关键字需要注意,特别需要关注的是大小写严格区分。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-T109_13190.jpg?sign=1738889306-WBodMrBLhsj1iLGxD3yKT3jd3Ce6J6Xy-0-27d86a5509e712c30eda4e3dcd845ca2)
- NSDate转NSString时,需要使用NSDateFormatter类的stringFromDate方法。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-T109_13192.jpg?sign=1738889306-b2880h6noecpIVrEzL9inBizlhnZtRf6-0-082dd328319c0c043db3797979f78c41)
- NSString转NSDate时,需要使用NSDateFormatter类的dateFromString方法。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-T109_13194.jpg?sign=1738889306-MXmAIY9tOHbgZwWrivooUB4RHt3TLArD-0-82636d55b1636894752bb1ac494e4452)
下方的示例代码中,演示了如何改变日期的显示形式以及日期与字符串之间的相互转换。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-T110_82836.jpg?sign=1738889306-YdNYJCnMN5CRt42h95sXkGJg5eyMRWTO-0-d6a7e37e3a962d9117adbf61d49e14d4)
运行结果如图4-22所示。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-P110_13356.jpg?sign=1738889306-vJu90PfEGkLWPoFBHzniAtvRmB9YSrYs-0-8209aaa3793085929550386bbca9d6d1)
图4-22 运行结果
3.其他常用操作
除了创建NSDate日期对象以及对日期对象的格式进行转换之外,NSDate类中还有以下几个方法也相对常用。
- 比较两个时间对象的先后,可以使用earlierDate以及laterDate方法。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-T110_13360.jpg?sign=1738889306-yKo1ICp0MxUieE9fCGEr61Z2cHYWQPFP-0-ebc6a851f9c148f131d8c6ee71bb6abb)
- 比较两个时间的间隔,可以使用timeIntervalSinceDate:方法,同时由于程序运行耗时的原因,会有微小的误差。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-T111_13503.jpg?sign=1738889306-BA08oQuez9gY3kJuxyPc9ehhb5vBaXmU-0-4ce3ac294b4bbcd1ef38e2198f9d4d6e)
- 比较两个日期是否相等,可以使用isEqualToDate:方法。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-T111_13505.jpg?sign=1738889306-w8ekudxpbjV6eppgVtv9pIad0xr4qg4f-0-e672473c367ca8c9616d13256476914f)
下方的示例代码中,演示了日期对象之间进行各种比较操作。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-T111_82837.jpg?sign=1738889306-EEzBNtmo4u0PT9mXi7ccrH75QkGKZtPI-0-66b8a94bb317179a0ec098393071f89e)
运行结果如图4-23所示。
![](https://epubservercos.yuewen.com/D4B438/15253388904120706/epubprivate/OEBPS/Images/Figure-P111_13509.jpg?sign=1738889306-nrDqzNxrK55phF888JacdhpZxnODabLZ-0-28d7bb5e3d4ac4ab1875a0ad24a01b48)
图4-23 运行结果