代码片段iOS Developerios开发整理

时间格式化为"刚刚,几分钟前,几小时前,昨天...&q

2016-10-10  本文已影响150人  KevinTing

如果你的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 <Foundation/Foundation.h>

@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
上一篇下一篇

猜你喜欢

热点阅读