如果你的app中有时间描述,比如下面:

Paste_Image.png

你要是老老实实地写“2016-10-10 8:45”那么就太out了,比起一串冷冷的数字,像“刚刚,3分钟前,昨天”等等表达显然更加温暖更加亲切。以发表一个微博为例,下面就是一种对时间的分类表达:

1、在一分钟之内刚发表的微博——"刚刚"

2、一个小时之内发表的——"XX分钟前"

3、今天发表的——"XX小时前"

4、昨天发表的——"昨天"

5、今年发表的——"月-日"

6、非今年发表的——"年-月-日"

除了用亲切的词汇表达之外,时间由近及远关注点也不一样,比如时间较近就关注分钟,小时,时间较远就关注日期,这样也比较合乎人们的习惯。NSCalendar类给我们提供了处理时间非常简便的方法,利用NSCalendar可以很快实现上面的时间分类转换:

// NSDate+CommonString.h

#import

@interface NSDate (CommonString)

- (NSString *)commonString;

@end

// NSDate+CommonString.m

#import "NSDate+CommonString.h"

@implementation NSDate (CommonString)

- (NSString *)commonString

{

NSDate *currentDate = [NSDate date];

NSCalendar *calendar = [NSCalendar currentCalendar];

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

if ([calendar isDate:self equalToDate:currentDate toUnitGranularity:NSCalendarUnitYear]) {

if ([calendar isDateInToday:self]) {

NSDateComponents *components = [calendar components:NSCalendarUnitMinute | NSCalendarUnitHour fromDate:self toDate:currentDate options:0];

if (components.hour == 0) {

if (components.minute == 0) {

return @"刚刚";

} else {

return [NSString stringWithFormat:@"%ld分钟前", (long)components.minute];

}

} else {

return [NSString stringWithFormat:@"%ld小时前", (long)components.hour];

}

} else if ([calendar isDateInYesterday:self]) {

return @"昨天";

} else {

[fmt setDateFormat:@"M-d"];

return [fmt stringFromDate:self];

}

} else {

[fmt setDateFormat:@"yyyy-M-d"];

return [fmt stringFromDate:self];

}

return nil;

}

@end