Может ли DateComponentsFormatter форматировать доли секунды?
Я хочу напечатать, например, значение 1,5 как "1,5 сек", как это делает временная шкала Safari, и я пытаюсь использовать для него DateComponentsFormatter.
К сожалению, его .allowedUnits
сводится только к .second
(хотя перечисление имеет .nanosecond
). Я пробовал настройку .allowsFractionalUnits = true
, но я все еще получаю "0 сек".
Есть ли способ получить дробные секунды из DateComponentsFormatter?
0 ответов
Для стиля позиционных единиц DateComponentsFormatter
можно использовать вместе с NumberFormatter
чтобы получить строку с учетом локали.
func format(_ seconds: TimeInterval) -> String {
let components = DateComponentsFormatter()
components.allowedUnits = [.minute, .second]
components.allowsFractionalUnits = true // does not work as expected
components.unitsStyle = .positional
components.zeroFormattingBehavior = .pad
let fraction = NumberFormatter()
fraction.maximumIntegerDigits = 0
fraction.minimumFractionDigits = 0
fraction.maximumFractionDigits = 3
fraction.alwaysShowsDecimalSeparator = false
let fractionalPart = NSNumber(value: seconds.truncatingRemainder(dividingBy: 1))
return components.string(from: seconds)! + fraction.string(from: fractionalPart)!
}
print(Locale.current) // ru_RU (current)
print(format(600.5)) // 10:00,5 <- note locale specific decimal separator
К сожалению, использовать этот метод для других стилей дат еще более опасно.