Swift DateComponentsFormatter会丢弃前导零但在分钟位置保留至少一位数

问题描述 投票:0回答:2

我在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?我更喜欢一个返回本地化结果的解决方案。

ios swift date nsdatecomponents nsdatecomponentsformatter
2个回答
1
投票

是。在设置日期组件格式化器允许的单位时,可以根据时间间隔添加三元条件,这很容易实现:


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"

0
投票

查看不同的zeroFormattingBehavior属性值。我用它来得到我认为你正在寻找的结果,但必要时进行实验......

    formatter.zeroFormattingBehavior = [.pad]
© www.soinside.com 2019 - 2024. All rights reserved.