Я хотел бы преобразовать время из секунд в позиционный формат, например 2:05 мин или 1:23 ч или 19 с. У меня проблема с получением локализованной сокращенной единицы времени. Вот мой код.
let secs: Double = 3801
let stopWatchFormatter = DateComponentsFormatter()
stopWatchFormatter.unitsStyle = .positional
stopWatchFormatter.maximumUnitCount = 2
stopWatchFormatter.allowedUnits = [.hour, .minute, .second]
print(stopWatchFormatter.string(from: secs)) // 1:03
stopWatchFormatter.unitsStyle = .short
print(stopWatchFormatter.string(from: secs)) // 1 hr, 3 min
Как вы можете видеть, 3801 секунда отформатирована в 1:03, что нормально, но я не знаю, использовались ли DateComponentsFormatter
часы или минуты и т. д. Я могу использовать простую логику MOD, чтобы проверить это, но затем наступает сложная часть локализации. Также обратите внимание, что решение MOD бесполезно, если я устанавливаю collapsesLargestUnit
в false
.
.positional
и используетеmaximumUnitCount
, вы просто не узнаете. Вам нужно будет либо использовать.short
(1 час 3 минуты), либо.abbreviated
(1 час 3 минуты). Если вы хотите 1:03 мин (я бы не рекомендовал это, поскольку мне не совсем понятно, что это значит), вам придется получитьDateComponents
и самостоятельно создать локализованную строку (с вашей собственной локализованной версией любых сокращений). ты хочешь). НоDateComponentsFormatter
не может сделать для вас этот пользовательский формат... - person Rob   schedule 12.01.2018