IOS里人性化的时间显示

本文介绍了一种在iOS项目中实现友好时间显示的方法,通过一套混合C的写法,能够将时间戳转换为如“刚刚”、“几分钟前”等易于理解的形式,并根据不同日期范围采用不同的格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候在项目对时间的显示可能需要比较友好一点,IOS本身的NSDate用着不是太爽,处理Date时那是真的头大,下面是混合C的一套写法:

(NSString *)friendlyTime:(NSString *)datetime
{
    time_t current_time = time(NULL);
    
    static NSDateFormatter *dateFormatter =nil;
    if (dateFormatter == nil) {
        dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        dateFormatter.timeZone = [NSTimeZonetimeZoneForSecondsFromGMT:0];
    }
    
    NSDate *date = [dateFormatter dateFromString:datetime];
    
    time_t this_time = [datetimeIntervalSince1970];
    
    time_t delta = current_time - this_time;

    if (delta <= 0) {
        return @"刚刚";
    }
    else if (delta <60)
        return [NSStringstringWithFormat:@"%ld秒前", delta];
    else if (delta <3600)
        return [NSStringstringWithFormat:@"%ld分钟前", delta /60];
    else {
        struct tm tm_now, tm_in;
        localtime_r(¤t_time, &tm_now);
        localtime_r(&this_time, &tm_in);
        NSString *format = nil;
        
        if (tm_now.tm_year == tm_in.tm_year) {
            if (tm_now.tm_yday == tm_in.tm_yday)
                format = @"今天 %-H:%M";
            else
                format = @"%-m月%-d日 %-H:%M";
        }
        else
            format = @"%Y年%-m月%-d日 %-H:%M";
        
        char buf[256] = {0};
        strftime(buf, sizeof(buf), [format UTF8String], &tm_in);
        return [NSStringstringWithUTF8String:buf];
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值