智能格式化时间跨度

时间:2011-04-21 09:11:37

标签: iphone objective-c time formatting

我需要一种方法将NSTimeInterval(以秒为单位的时间跨度)格式化为字符串,以生成类似“大约10分钟前”的内容“1h,20min” ,或“不到1分钟”

-(NSString*) formattedTimeSpan:(NSTimeInterval)interval;

目标平台是iOS。欢迎使用示例代码。

3 个答案:

答案 0 :(得分:30)

这是NSDate的类别。它并没有完全使用NSTimeInterval,内部很好:)我假设您正在使用时间戳。

标头文件NSDate + PrettyDate.h

@interface NSDate (PrettyDate)

- (NSString *)prettyDate;

@end

实施NSDate + PrettyDate.m

@implementation NSDate (PrettyDate)

- (NSString *)prettyDate
{
    NSString * prettyTimestamp;

    float delta = [self timeIntervalSinceNow] * -1;

    if (delta < 60) {
        prettyTimestamp = @"just now";
    } else if (delta < 120) {
        prettyTimestamp = @"one minute ago";
    } else if (delta < 3600) {
        prettyTimestamp = [NSString stringWithFormat:@"%d minutes ago", (int) floor(delta/60.0) ];
    } else if (delta < 7200) {
        prettyTimestamp = @"one hour ago";      
    } else if (delta < 86400) {
        prettyTimestamp = [NSString stringWithFormat:@"%d hours ago", (int) floor(delta/3600.0) ];
    } else if (delta < ( 86400 * 2 ) ) {
        prettyTimestamp = @"one day ago";       
    } else if (delta < ( 86400 * 7 ) ) {
        prettyTimestamp = [NSString stringWithFormat:@"%d days ago", (int) floor(delta/86400.0) ];
    } else {
        NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
        [formatter setDateStyle:NSDateFormatterMediumStyle];

        prettyTimestamp = [NSString stringWithFormat:@"on %@", [formatter stringFromDate:self]];
        [formatter release];
    }

    return prettyTimestamp;
}

答案 1 :(得分:3)

您可能想参考Facebook three20框架。在他们的NSDateAdditions中,他们为日期提供了一些漂亮的格式。它可能比你扩展它更好。

请参阅https://github.com/facebook/three20/blob/master/src/Three20Core/Sources/NSDateAdditions.m

上的来源

- (NSString*)formatShortRelativeTime;会给你“&lt; 1m”,“50m”,“3h”,“3d”

答案 2 :(得分:1)

以下是以Facebook风格格式化日期:

https://github.com/nikilster/NSDate-Time-Ago