Eva*_*sky 5 date nsdatecomponents ios swift nsdatecomponentsformatter
我在 Swift 中使用以下 DateComponentsFormatter:
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional
formatter.allowedUnits = [.hour, .minute, .second]
formatter.zeroFormattingBehavior = [.default]
Run Code Online (Sandbox Code Playgroud)
这会产生类似 2:41(2 分 41 秒)和 08(8 秒)的结果。但是,我想在 Minutes 位置至少保留一位数字,返回 0:08 而不是 08。这可能与 DateComponentsFormatter 一起使用吗?我更喜欢返回本地化结果的解决方案。
是的。这可以很容易地完成,在设置日期组件格式化程序允许的单位时根据时间间隔添加三元条件:
Xcode 11 • Swift 5.1
extension Formatter {
static let positional: DateComponentsFormatter = {
let positional = DateComponentsFormatter()
positional.unitsStyle = .positional
positional.zeroFormattingBehavior = .pad
return positional
}()
}
Run Code Online (Sandbox Code Playgroud)
extension TimeInterval {
var positionalTime: String {
Formatter.positional.allowedUnits = self >= 3600 ?
[.hour, .minute, .second] :
[.minute, .second]
let string = Formatter.positional.string(from: self)!
return string.hasPrefix("0") && string.count > 4 ?
.init(string.dropFirst()) : string
}
}
Run Code Online (Sandbox Code Playgroud)
用法
8.0.positionalTime // "0:08"
161.0.positionalTime // "2:41"
3600.0.positionalTime // "1:00:00"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2306 次 |
| 最近记录: |