ios开发-如何处理服务器返回的日期
2015-12-28 本文已影响3341人
没阳光的午后
本篇所讲的是如何对服务器返回的时间数据处理成自己想显示的时间格式并且完成判断今天昨天今年
基本概念
- 需要先创建一个
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;
}