将 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",因此您也可以尝试其他的,然后选择最适合您的情况。
我想将 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",因此您也可以尝试其他的,然后选择最适合您的情况。