В принципе, я хочу получить значение интервала времени, представленного только в часах, без округления до полного часа (используя NSDateComponentsFormatter, чтобы получить его правильно форматированный и локализованный). Я не знаю, неправильно ли я понял использование NSDateComponentsFormatter.allowsFractionalUnits, но я не могу заставить форматировать дать мне десятичное значение. Может ли кто-нибудь помочь мне определить мою ошибку или сказать мне, каким образом я неправильно понимаю это?
Из документов Apple о разрешении свойстваFractionalUnits:
Дробные единицы могут использоваться, когда значение не может быть точно представленный с использованием доступных единиц. Например, если минуты не разрешено, значение "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"
Обновление: Я сообщил об ошибке Apple об этой проблеме (rdar://22660145).