美文网首页代码片段iOS Developerios开发整理
时间格式化为"刚刚,几分钟前,几小时前,昨天...&q

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

作者: KevinTing | 来源:发表于2016-10-10 21:57 被阅读150次

    如果你的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
    

    相关文章

      网友评论

        本文标题:时间格式化为"刚刚,几分钟前,几小时前,昨天...&q

        本文链接:https://www.haomeiwen.com/subject/qbyvyttx.html