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

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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值