基本上我想要的是获得仅以小时为单位表示的时间间隔的值,而不是将其四舍五入到整小时(使用NSDateComponentsFormatter来使其正确格式化和本地化).我不知道我是否误解了NSDateComponentsFormatter.allowsFractionalUnits的使用,但我无法让格式化程序给我一个十进制值.任何人都可以帮助我发现我的错误或告诉我我以何种方式误解了这个?
从Apple docs about allowFractionalUnits属性:
当使用可用单位无法准确表示值时,可以使用小数单位.例如,如果不允许分钟,则值"1h 30m"可以格式化为"1.5h".
Swift示例代码:
let formatter = NSDateComponentsFormatter()
formatter.unitsStyle = .Abbreviated
formatter.allowedUnits = .Hour
formatter.allowsFractionalUnits = true
let onePointFiveHoursInSeconds = NSTimeInterval(1.5 * 60.0 * 60.0)
print(formatter.stringFromTimeInterval(onePointFiveHoursInSeconds)!)
//"1h" instead of expected "1.5h"
Run Code Online (Sandbox Code Playgroud)
Objective-C代码中的相同示例:
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleAbbreviated;
formatter.allowedUnits = NSCalendarUnitHour;
formatter.allowsFractionalUnits = YES;
NSTimeInterval onePointFiveHoursInSeconds = 1.5 * 60.0 * 60.0;
NSLog(@"%@", [formatter stringFromTimeInterval:onePointFiveHoursInSeconds]);
//"1h" instead of expected "1.5h"
Run Code Online (Sandbox Code Playgroud)
更新:我已向Apple报告了有关此问题的错误(rdar:// 22660145).