iOS 如何处理类似微博的日期

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014128241/article/details/53727847

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

基本概念

  • 需要先创建一个NSDateFormatter来设置一下日期格式dateFormat
  • y代表年,M代表月,d代表天,h/H代表小时,这里h代表12小时制,H代表24小时制,m代表分,s代表秒,Z代表时区,注意:这里需要严格区分大小写,否则会导致错误

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

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;
    }

猜你喜欢

转载自blog.csdn.net/u014128241/article/details/53727847