iOS工作系列iOS-虚心若愚,求知若饥iOS Cocoa

ios开发-如何处理服务器返回的日期

2015-12-28  本文已影响3341人  没阳光的午后

本篇所讲的是如何对服务器返回的时间数据处理成自己想显示的时间格式并且完成判断今天昨天今年

基本概念

几种转换服务器返回的日期数据例子

1.返回的数据为 Tue May 31 18:20:45 +0800 2011

    NSString *string = @"Tue May 31 18:20:45 +0800 2011";

    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];

    fmt.dateFormat = @"EEE MMM dd HH:mm:ss ZZZZ yyyy";

    fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en-US"];

    NSDate *date = [fmt dateFromString:string];

2.返回的数据为 12/23/2015 12点08:03秒

    NSString *string = @"12/23/2015 12点08:03秒";

    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"MM/dd/yyyy HH点mm:ss秒";

    NSDate *date = [fmt dateFromString:string];

3.返回的数据为 2015-12-26 12:08:03

    NSString *createdAt = @"2015-12-26 12:08:03";

    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";

4.还有种特殊情况,也许服务器会返回一长串数字,譬如525245245,这个不是服务器出错了,这长串数字叫时间戳,这时候需要将时间戳转换为1970年的时间,并且除以1000

    NSString *string = @"1454645645654";

    NSDate *date = [NSDate dateWithTimeIntervalSince1970:string.doubleValue / 1000];

如何通过手机本地时间判断服务器返回时间是哪天

1.如何判断今年很简单,只需要将本地时间和返回数据转为yyyy格式就可以判断

    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyy";
    
    NSString *nowYear = [fmt stringFromDate:[NSDate date]];
    NSString *selfYear = [fmt stringFromDate:self];
    
    return [nowYear isEqualToString:selfYear];

2.如何判断昨天,将格式转为yyyyMMdd,然后将时间字符串转为NSDate类型来比较

    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyyMMdd";
    
    NSString *nowString = [fmt stringFromDate:[NSDate date]]; 
    NSString *selfString = [fmt stringFromDate:self]; 
    
    NSDate *nowDate = [fmt dateFromString:nowString];
    NSDate *selfDate = [fmt dateFromString:selfString];
    
    NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
    NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
    NSDateComponents *cmps = [calendar components:unit fromDate:selfDate toDate:nowDate options:0];
    
    return cmps.year == 0
    && cmps.month == 0
    && cmps.day == 1;

3.判断今天和判断昨天差不多

    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyyMMdd";
    
    NSString *nowString = [fmt stringFromDate:[NSDate date]]; 
    NSString *selfString = [fmt stringFromDate:self];
    
    return [nowString isEqualToString:selfString];

最后在模型里面设置时间

    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    NSDate *createdAtDate = [fmt dateFromString:_created_at];
    
    if (createdAtDate.bs_isThisYear) { // 今年
        if (createdAtDate.bs_isYesterday) { // 昨天
            fmt.dateFormat = @"昨天 HH:mm:ss";
            return [fmt stringFromDate:createdAtDate];
        } else if (createdAtDate.bs_isToday) { // 今天
            NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
            NSCalendarUnit unit = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
            NSDateComponents *cmps = [calendar components:unit fromDate:createdAtDate toDate:[NSDate date] options:0];
            
            if (cmps.hour >= 1) { // 时间间隔 >= 1小时
                return [NSString stringWithFormat:@"%zd小时前", cmps.hour];
            } else if (cmps.minute >= 1) { // 1小时 > 时间间隔 >= 1分钟
                return [NSString stringWithFormat:@"%zd分钟前", cmps.minute];
            } else { // 时间间隔 < 1分钟
                return @"刚刚";
            }
        } else { // 不是今天昨天
            fmt.dateFormat = @"MM-dd HH:mm:ss";
            return [fmt stringFromDate:createdAtDate];
        }
    } else { // 不是今年
        return _created_at;
    }
上一篇下一篇

猜你喜欢

热点阅读