NSDateComponentsFormatter

NSDateComponentsFormatter

我想将NSTimeInterval转换为类似的格式



如何以对语言环境友好的方式实现这一目标?是否有 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解决方案,就是这样。如果您正在寻找不同的东西,您可能会陷入困境。另外请注意,有几种不同的“单元样式”,因此您也可以尝试其他样式,并选择最适合您的情况的样式。

10-08 15:03