我正在尝试使用新的 Foundation 格式化程序。要格式化
Date
,我可以这样做:
Date.now.formatted(.dateTime.hour().minute().second())
// 5:03:17 PM
但是,我正在尝试使用这个新的 API 来替换
DateComponentsFormatter
:
let duration: TimeInterval = 0
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional
formatter.allowedUnits = [.minute, .second]
formatter.zeroFormattingBehavior = [.pad]
let formattedDuration = formatter.string(from: 0)
// 00:00
如何使用新的 Foundation 格式化程序 API
formatted
而不是 DateComponentsFormatter
?
AFAIK 时间间隔的格式化方法仅适用于需要使用
Duration
初始化的 timeval
对象:
let timeInterval: TimeInterval = 125.0
let tmv = timeval(tv_sec: Int(timeInterval), tv_usec: 0)
Duration(tmv)
.formatted(.time(pattern: .hourMinuteSecond)) // "0:02:05"
Duration(tmv)
.formatted(.time(pattern: .minuteSecond)) // "2:05"
或
Duration(
secondsComponent: Int64(timeInterval),
attosecondsComponent: 0
).formatted(.time(pattern: .minuteSecond)) // "2:05"
您还可以使用其静态方法进行初始化:
let timeInterval: TimeInterval = 125.0
var duration: Duration = .seconds(timeInterval)
duration += .milliseconds(789) // 125.789 seconds
duration.formatted(.time(pattern: .minuteSecond)) // "2:06"
如果您需要进一步定制:
duration.formatted(.time(pattern: .minuteSecond(padMinuteToLength: 2))) // "02:06"
duration.formatted(.time(pattern: .minuteSecond(padMinuteToLength: 2, roundFractionalSeconds: .down))) // "02:05"
duration.formatted(.time(pattern: .minuteSecond(padMinuteToLength: 2, fractionalSecondsLength: 3))) // "02:05.789"