我在Swift中使用以下DateComponentsFormatter:
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional
formatter.allowedUnits = [.hour, .minute, .second]
formatter.zeroFormattingBehavior = [.default]
这产生的结果如2:41(2分41秒)和08(8秒)。但是,我想在分钟位置保留至少一位数,返回0:08而不是08.这是否可以使用DateComponentsFormatter?我更喜欢一个返回本地化结果的解决方案。
是。在设置日期组件格式化器允许的单位时,可以根据时间间隔添加三元条件,这很容易实现:
extension Formatter {
static let positional: DateComponentsFormatter = {
let positional = DateComponentsFormatter()
positional.unitsStyle = .positional
positional.zeroFormattingBehavior = .pad
return positional
}()
}
extension TimeInterval {
var positionalTime: String {
Formatter.positional.allowedUnits = self >= 3600 ?
[.hour, .minute, .second] :
[.minute, .second]
return Formatter.positional.string(from: self)!
}
}
用法
8.0.positionalTime // "0:08"
161.0.positionalTime // "2:41"
3600.0.positionalTime // "1:00:00"
查看不同的zeroFormattingBehavior属性值。我用它来得到我认为你正在寻找的结果,但必要时进行实验......
formatter.zeroFormattingBehavior = [.pad]