iOS之 改变日期显示样式

来源:互联网 发布:ubuntu 16.04 syslog 编辑:程序博客网 时间:2024/06/05 10:52

开发社交或者资讯类APP时需要把获取的时间日期改为可读性好的“几小时前”、“几分钟前”

下面我提供方法,可以备下以后套用


首先在工程中添加NSDate的类目”NSDate+GDGCategory

NSDate+GDGCategory.h

#import <Foundation/Foundation.h>@interface NSDate (GDGCategory)/** *比较from和self的时间差值 */-(NSDateComponents*)deltaFrom:(NSDate*)from;/** *是否为今年 */-(BOOL)isThisYear;/** *是否为今天 */-(BOOL)isToday;/** *是否为昨天 */-(BOOL)isYesterday;@end

NSDate+GDGCategory.m

#import "NSDate+GDGCategory.h"@implementation NSDate (GDGCategory)-(NSDateComponents*)deltaFrom:(NSDate*)from{    //初始化日历    NSCalendar * calendar = [NSCalendar currentCalendar];    //设置日历单元    NSCalendarUnit unit = NSCalendarUnitDay |NSCalendarUnitMonth |NSCalendarUnitYear |NSCalendarUnitHour |NSCalendarUnitMinute |NSCalendarUnitSecond;    //返回比较你的数据时间与现在时间的差值    return [calendar components:unit fromDate:from toDate:self options:0];}/* *例如  2016 - 05 - 01 *     年份值  月份  日 * *///判断是否是今年-(BOOL)isThisYear{    NSCalendar * calendar = [NSCalendar currentCalendar];    //现在日期的年份值    NSInteger nowYear = [calendar component:NSCalendarUnitYear fromDate:[NSDate date]];    //传入对象的年份值    NSInteger selfYear = [calendar component:NSCalendarUnitYear fromDate:self];    return nowYear == selfYear;}//判断是否是今天-(BOOL)isToday{    NSDateFormatter * fmt = [[NSDateFormatter alloc]init];    fmt.dateFormat = @"yyyy-MM-dd";    //今天的日期    NSString * nowString = [fmt stringFromDate:[NSDate date]];    //传入对象的日期    NSString * selfString = [fmt stringFromDate:self];    return [nowString isEqualToString:selfString];}//判断是否是昨天-(BOOL)isYesterday{    NSDateFormatter * fmt = [[NSDateFormatter alloc]init];    fmt.dateFormat = @"yyyy-MM-dd";    //今天的日期    NSDate *nowDate = [fmt dateFromString:[fmt stringFromDate:[NSDate date]]];    //传入对象的日期    NSDate *selfDate = [fmt dateFromString:[fmt stringFromDate:self]];    //二者差值    NSCalendar * calender = [NSCalendar currentCalendar];    NSDateComponents * cmps = [calender components:NSCalendarUnitDay | NSCalendarUnitMonth |  NSCalendarUnitYear fromDate:selfDate toDate:nowDate options:0];    return cmps.year == 0 && cmps.month == 0 && cmps.day == 1;}@end

备注很清楚,应该可以看懂,代码可以用在很多地方

ViewController.h

#import <UIKit/UIKit.h>@interface ViewController : UIViewController/**你所获取数据的发布时间 */@property (nonatomic, copy) NSString *create_time;//get方法-(NSString *)create_time;@end

ViewController.m

#import "ViewController.h"#import "NSDate+GDGCategory.h"@interface ViewController ()@end@implementation ViewController//重写get方法-(NSString *)create_time{    //日期格式化    NSDateFormatter * fmt = [[NSDateFormatter alloc]init];    //设置日期格式    fmt.dateFormat = @"yyyy-MM-dd HH-mm-ss";    //帖子的创建时间    NSDate * create = [fmt dateFromString:_create_time];    /**     显示效果     今年        今天         1分钟内             刚刚         1小时内             xx分钟前         其他            xx小时前         昨天            昨天 18:56:34         其他           06-23 19:56:23     非今年     2016-05-08 18:45:30     */    if (create.isThisYear) { // 今年        if (create.isToday) { // 今天        //时间差            NSDateComponents *cmps = [[NSDate date] deltaFrom:create];            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 if (create.isYesterday) { // 昨天            fmt.dateFormat = @"昨天 HH:mm:ss";            return [fmt stringFromDate:create];        } else { // 其他            fmt.dateFormat = @"MM-dd HH:mm:ss";            return [fmt stringFromDate:create];        }    } else { // 非今年        return _create_time;    }}

Demo下载 :GitHub DateShowStyle

0 0