DateComponentsFormatter показывает ведущий ноль

Я использую DateComponentsFormatter отформатировать TimeInterval в iOS Если у меня результат 1:09, должен быть показан начальный ноль. Что результат выглядит так: 01:09. Это возможно с DateComponentsFormatter,

Вот мой пример кода:

let interval: TimeInterval = 4155

let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional
formatter.allowedUnits = [.hour, .minute]
formatter.zeroFormattingBehavior = .pad
formatter.collapsesLargestUnit = false

formatter.string(from: interval)

1 ответ

Решение

Если вы хотите отформатировать интервал как время, то лучшим решением будет использование DateFormatter:

let interval: TimeInterval = 4155
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "HH:mm"

print(formatter.string(from: Date(timeIntervalSinceReferenceDate: interval)))

Это всегда будет использовать один и тот же формат, всегда отображая часы.

DateComponentFormatter не дополняется нулями, поскольку предполагается, что он будет использоваться с более высокими единицами, например, вы можете получить результаты, например "300:24", если ваш TimeInterval достаточно высок.

Использовать zeroFormattingBehavior = .pad например:

let formatter = DateComponentsFormatter()
                formatter.allowedUnits = [.hour, .minute, .second]
                formatter.unitsStyle = .positional
                formatter.zeroFormattingBehavior = .pad

                let outPut = formatter.string(from: TimeInterval(duration)) ?? ""
Другие вопросы по тегам