将 NSTimeInterval 转换为“1w 3d 4h 15m 21s”格式的字符串,语言环境友好吗?

Convert NSTimeInterval to string in "1w 3d 4h 15m 21s" format, locale-friendly?

我想将 NSTimeInterval 转换为类似

的格式

1w 3d 4h 15m 21s

我怎样才能以语言环境友好的方式实现这一点?是否有 cocoa API 可以执行此操作,或者至少有办法获得 "w"、"d"、"h"、"m" , "s" 在用户的语言环境中?

NSDateComponentsFormatter 就是你想要的。它可能不会产生您正在寻找的东西,但我的印象是它旨在产生符合 ICU 标准约定的输出。例如,考虑这个:

NSDateComponentsFormatter* dcf = [[NSDateComponentsFormatter alloc] init];
dcf.unitsStyle = NSDateComponentsFormatterUnitsStyleAbbreviated;

NSCalendar* cal = [NSCalendar calendarWithIdentifier: NSCalendarIdentifierGregorian];
cal.locale = [NSLocale localeWithLocaleIdentifier: @"es_ES"]; // Spanish locale for Spain

dcf.calendar = cal;

NSLog(@"%@", [dcf stringFromTimeInterval: 1000000]);

...产生:

1 semana, 4 d, 13 h, 46 min, 40 s

因此,这与您的示例格式略有不同,但我的猜测是在 ICU unicode 标准文档的某个深处,指定如果一个间隔既有周又有秒,那么您会得到 "semana" 数周而不是 "s"。不过,我不会折磨自己去寻找那个文件。

因此,如果您正在寻找 ICU 解决方案,就是它了。如果您正在寻找不同的东西,您可能会陷入困境。另请注意,有一些不同的 "unit styles",因此您也可以尝试其他的,然后选择最适合您的情况。