• 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";
  • 相关阅读:
    简单内存泄漏检测方法 解决 Detected memory leaks!
    C++&&XML; “未使用调试信息生成二进制文件” vs assist
    H3C ACL地址转换配置等
    oracle 数据库表导入导出
    内存的使用与windows 内存监控
    Java Development in Flash Builder 4 Standalone
    flex builder
    美国化妆品
    vs 主题
    Boost lib linker error Visual C++
  • 原文地址:https://www.cnblogs.com/KrystalNa/p/4858605.html
Copyright © 2020-2023  润新知