基本概念
- 需要先创建一个
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;
}
文/没阳光的午后(简书作者)
原文链接:http://www.jianshu.com/p/7067adc64e75/comments/1116268
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文链接:http://www.jianshu.com/p/7067adc64e75/comments/1116268
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。