DateComponentsFormatter 显示前导零

pat*_*ckS 5 date nsdateformatter ios swift

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)
Run Code Online (Sandbox Code Playgroud)

Alv*_*ohn 6

使用zeroFormattingBehavior = .pad例如:

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

                let outPut = formatter.string(from: TimeInterval(duration)) ?? ""
Run Code Online (Sandbox Code Playgroud)


Sul*_*han 5

如果要将间隔格式化为时间,那么最好的解决方案是使用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)))
Run Code Online (Sandbox Code Playgroud)

这将始终使用相同的格式,始终显示小时。

DateComponentFormatter因为它应该具有较高的单位使用零不垫,例如,你可以得到结果,如“300:24”如果你TimeInterval是足够高的。

  • 此解决方案的一个问题是结果不像“DateComponentsFormatter”那样本地化。例如,您在阿拉伯语语言环境的两组代码之间得到非常不同的结果。 (3认同)