时间的处理
1. 发布时间的显示
- 服务器返回的时间是年月日,应该给它对系统时间进行比较,转换成发布的时长
- 对服务器传过来的时间字符串在模型的get方法中做string转Date,比较与当前时间的差值,返回处理的结果(参照下面介绍的时间划分)
服务器返回的日期
- 时间字符串2015-09-13 18:13:03
- 时间戳5656566565
时间戳
- 从1970-1-1 00:00:00开始到现在为止走过的毫秒数
NSDate *date = [NSDate dateWithTimeIntervalSince1970:时间戳/1000.0];
2. 时间的划分
今年
今天 |
昨天 |
其他 |
时间差 < 1分钟 -> 刚刚 |
昨天 19:06:65 |
08-07 18:06:56 |
1分钟 =< 时间差 <=59分钟 -> xx分钟前 |
|
|
时间差 >=1小时 -> xx小时前 |
|
|
非今年
3. string转成NSDate
- 获取系统的当前时间[NSDate date] ,默认是0时区(中国东8区)
string转成NSDate步骤
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
//设置日期格式(解析字符串中的日期元素)
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
- Step2:使用NSDateFormatter自带的方法,进行日期转换
NSDate *createdAtDate = [fmt dateFromString: 服务器返回的事件字符串]
日期转化技巧
- 直接把返回的日期字符串粘过来进行修改
- 年year用
y
表示
- 月份month用大写
M
表示,区别分(minute)
- 日day用
d
表示
- 小时用
H
(24小时制)或者h
(12小时制)表示
- 分minute用
m
表示
- 秒second用
s
表示
NSDate转成自定义格式的字符串
- [fmt stringFromDate:[NSDate date]];
4. NSDate的比较
方法一:timeIntervalSinceDate:获得相差的秒数
NSDate *nowDate = [NSDate date];
//获取createdAtDate和系统当前时间的差值
NSTimeInterval interval = [nowDate timeIntervalSinceDate:createdAtDate];
方法二:使用NSCalendar
NSCalendar *calendat = [NSCalendar current Calendar];
[calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:createdAtDate toDate:nowDate options:0];
5. 给NSDate创建分类封装 比较时间的方法
NSCalendar介绍
获得当前日历对象
NSCalendar *calendat = [NSCalendar current Calendar];
应用1:准确获得一个时间元素
NSInteger cmp = [calendar component:NSCalendarUnitHour fromDate:date1];
应用2:准确获得多个时间元素
NSDateComponents *cmps = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:date1];
NSLog(@"%zd,%zd,%zd",cmps.year,cmps.month,cmps.day)
NSLog(@"%@",cmps);
应用3:获得两个时间的差值
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd";
NSDate *date1 = [fmt dateFromString:@"2015-08-31"];
NSDate *date2 = [fmt dateFromString:@"2015-09-01"];
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents *dateInterval = [calendar components:unit fromDate:date1 toDate:date2 options:kNilOptions];
NSLog(@"%@",dateInterval);
NSDdate的封装的补充
- dateFormat = @"昨天 HH:mm:ss";