基本上我想要的是只获取表示时间间隔的小时值,而不将其舍入为整数小时(使用NSDateComponentsFormatter进行正确格式化和本地化)。 我不知道我是否误解了NSDateComponentsFormatter.allowsFractionalUnits的用法,但我无法让格式化程序给我一个小数值。 有人能帮我找出我的错误或告诉我我在哪方面误解了吗?
关于allowsFractionalUnits属性的Apple文档:
当使用可用单位无法精确表示值时,可以使用分数单位。例如,如果不允许使用分钟,则可以将值“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"
在 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"
更新:我已向苹果报告了这个问题的一个错误(rdar:// 22660145)。