Swift 是否更改DateComponents以显示2位小数?

Swift 是否更改DateComponents以显示2位小数?,swift,xcode,Swift,Xcode,我一直在尝试将我的标签从DateComponents更改为小数点后2位。虽然我在网上找到了一些解决方案,但在计算时间差时,它们似乎并不适用 let userCalendar = Calendar.current let date = Date() let components = userCalendar.dateComponents([.hour, .minute, .month, .year, .day, .second], from: date) let currentDate = use

我一直在尝试将我的标签从DateComponents更改为小数点后2位。虽然我在网上找到了一些解决方案,但在计算时间差时,它们似乎并不适用

let userCalendar = Calendar.current
let date = Date()
let components = userCalendar.dateComponents([.hour, .minute, .month, .year, .day, .second], from: date)
let currentDate = userCalendar.date(from: components)!


let timeDifference = userCalendar.dateComponents([.day, .hour, .minute, .second], from: currentDate, to: dateStored as! Date)
label.text = "\(timeDifference.day!): \(timeDifference.hour!): \(timeDifference.minute!): \(timeDifference.second!)"
上面的代码生成一个默认显示0:0:0:0的标签,但我希望它默认显示00:00:00。所以在9秒钟内,它显示0:0:0:9,但它应该显示00:00:00:09


任何帮助都将不胜感激。谢谢

这里有一个生成0前缀组件的模式

String(format: "%02d", timeDifference.day!)
简单的答案是

String(format: "%02d", timeDifference.day!)
或者如果你想在你的项目中多次使用它,为它写一个扩展。你可以添加任意数量的零

extension Int {
    func addLeadingZero(_ leadingZeroCount:Int = 2)->String {
        return String(format: "%0\(leadingZeroCount)d", self)
    }
}

print((timeDifference.day!).addLeadingZero()) //09
print((timeDifference.day!).addLeadingZero(3)) //009

这个答案生成不同的输出,但我认为它更容易阅读,并且使用内置的DateComponents格式

let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.day, .hour, .minute, .second]
formatter.zeroFormattingBehavior = .pad
formatter.unitsStyle = .positional
如果
时差
为9秒

formatter.string(from: timeDifference)
将输出

0d 00:00:09

试试这个

extension Int {
    func getFirst2Digit()->String {
        let numberAsString = String(number)
        let subString = numberAsString.substringToIndex(numberAsString.startIndex.advancedBy(2))
        return numberAsString
    }
}
那就用这个吧

label.text = "\(timeDifference.day!.getFirst2Digit()): \(timeDifference.hour!.getFirst2Digit()): \(timeDifference.minute!.getFirst2Digit()): \(timeDifference.second!.getFirst2Digit())"

将组件的格式设置为
String(格式:“%02d”,timeDifference.day!)
由于很难阅读,您确定该格式吗?我很不习惯使用:在白天和小时之间,通常使用空格代替。我使用了简单的方法!很好!我以前尝试过这样做,但在代码中放错了。干杯