前几天在开发的时候遇到了日期方面的处理,花费了不少时间,踩了点坑,今天就把遇到的写一下.
本文内容
- 时间格式
- 时间差(两个日期之间的天数、月数、年数差)计算
时间格式
在iOS中 NSDateFormatter 处理时间格式的东东,上次有个需求,就是获取网络请求中cookie的时间
cookie中的时间是这个酱子的:
1 | Date:Sat, 21 May 2016 07:57:20 GMT |
NSDateFormatter 中有一下格式:
| 格式 | 说明 |
|---|---|
| G | 公元时代,例如AD公元 |
| yy | 年的后2位 如:2016 中的 16 |
| yyyy | 完整年 如:2016 |
| MM | 月,显示为1-12 |
| MMM | 月,显示为英文月份简写,如 Jan |
| MMMM | 月,显示为英文月份全称,如 Janualy |
| dd | 日,2位数表示,如02 |
| d | 日,1-2位显示,如 2 |
| EEE | 简写星期几,如Sun |
| EEEE | 全写星期几,如Sunday |
| aa | 上下午,AM/PM |
| H | 时,24小时制,0-23 |
| K | 时,12小时制,0-11 |
| m | 分,1-2位 ( 0-9 是一位 ) |
| mm | 分,2位 |
| s | 秒,1-2位 |
| ss | 秒,2位 |
| S | 毫秒 |
| Z | GMT |
了解了上面的格式,那就容易多了,故格式是:EEE, dd MMM yyyy HH:mm:ss Z
1 | NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; |
但是上面的代码 得出的 date 可能是 nil,后面查了下原来是少设置了NSLocale (区域设置)
因为时间格式是英文的,所以:
1 | NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; |
另外,关于是使用 en_US_POSIX还是en_US 可以看这篇文章
当然,你设置成了 zh_CN ,那格式出来的是中文了,如“EEE, dd MMM yyyy HH:mm:ss Z”格式出来的:
1 | 周六, 21 5月 2016 16:37:57 +0800 |
时间差计算
要计算两个日期的有多少天,多少个月,如果要自己计算的话,那就爽歪歪了,不过所幸 iOS的日历功能( NSCalendar )可以给我们提供一些便利。
1 | NSDate *date1 = [formatter dateFromString:@"2016-05-21"]; |
参考:
http://blog.csdn.net/crayondeng/article/details/8755306
http://www.125135.com/339261.htm
http://www.cnblogs.com/kaysun/p/5466508.html