iOS评论App----常用时间的处理

时间的处理

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小时前

非今年

  • 2014-08-07 18:06:56

3. string转成NSDate

  • 获取系统的当前时间[NSDate date] ,默认是0时区(中国东8区)

string转成NSDate步骤

  • Step1: 声明时间字符串的格式
 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可以加中文

  • dateFormat = @"昨天 HH:mm:ss";
posted @ 2015-10-07 13:45  紫之灵玲  阅读(314)  评论(0编辑  收藏  举报