【问题标题】:How can I format time intervals in Cocoa?如何在 Cocoa 中格式化时间间隔?
【发布时间】:2009-10-02 09:40:52
【问题描述】:

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

1 小时 3 分钟 2小时5分12秒 5天2小时

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

我也想过自己做,但是遇到了各种各样的问题:

  • 本地化
  • 非公历。

【问题讨论】:

标签: cocoa formatting


【解决方案1】:

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

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

+ (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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2012-02-17
    • 2010-11-01
    • 2020-02-13
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多