如何在Cocoa中格式化时间间隔?

Geo*_*lly 6 formatting cocoa

我正在寻找一个像这样格式化时间间隔的类:

1 hour 3 minutes
2 hours 5 minutes 12 seconds
5 days 2 hours

是否有任何内置或库支持这种时间间隔格式?

我想过自己做,但有各种各样的问题:

  • 本土化
  • 非格里高利历.

Dej*_*jal 2

这是一个老问题,但对于任何偶然发现这个问题的人来说,请查看NSDateComponentsFormatter

例如,以下是NSDate我的DejalFoundationCategories开源项目中的类别方法:

+ (NSString *)dejal_relativeStringForTimeInterval:(NSTimeInterval)timeInterval style:(NSDateComponentsFormatterUnitsStyle)unitsStyle maximumUnits:(NSInteger)maximumUnits keepZero:(BOOL)keepZero defaultValue:(NSString *)defaultValue;
{
    // If more than 10 years, assume distant past or future:
    if (abs(timeInterval) > 60 * 60 * 24 * 365 * 10)
    {
        return defaultValue;
    }

    NSDateComponentsFormatter *formatter = [NSDateComponentsFormatter new];

    formatter.unitsStyle = unitsStyle;
    formatter.maximumUnitCount = maximumUnits;

    if (keepZero)
    {
        formatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorDropLeading | NSDateComponentsFormatterZeroFormattingBehaviorDropMiddle;
    }
    else
    {
        formatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorDropAll;
    }

    return [formatter stringFromTimeInterval:timeInterval];
}
Run Code Online (Sandbox Code Playgroud)