如何在 Swift 中将 TimeInterval 转换为分钟、秒和毫秒

How to convert TimeInterval into Minutes, Seconds and Milliseconds in Swift

我正在编写一个赛车应用程序,想将大量毫秒转换为 minutes:seconds. 毫秒(例如,1:32.361)。目前我只是通过数学 (minutes / 60000) 来计算,然后求余数并进一步除以等等,但我发现它时不时地关闭 1 毫秒。我知道这听起来可能没什么大不了的,但我试图找到 1:32.0041:32.004 的平均值,结果返回了 1:32.003,这意味着它被错误地输入了,其余的该应用程序无法处理它。

有没有办法使用 NSDateNSDateFormatter 或类似的方法将毫秒格式化为 MM:ss.mmm?

我查看了这些来源但没有找到答案:

How to convert milliseconds into minutes?
Convert seconds into minutes and seconds
Convert milliseconds to minutes
http://www.codingexplorer.com/swiftly-getting-human-readable-date-nsdateformatter/

您可以创建一个 TimeInterval 扩展来格式化您经过的时间,如下所示:

Xcode 11.4 • Swift 5.2 或更高版本

extension TimeInterval {
    var hourMinuteSecondMS: String {
        String(format:"%d:%02d:%02d.%03d", hour, minute, second, millisecond)
    }
    var minuteSecondMS: String {
        String(format:"%d:%02d.%03d", minute, second, millisecond)
    }
    var hour: Int {
        Int((self/3600).truncatingRemainder(dividingBy: 3600))
    }
    var minute: Int {
        Int((self/60).truncatingRemainder(dividingBy: 60))
    }
    var second: Int {
        Int(truncatingRemainder(dividingBy: 60))
    }
    var millisecond: Int {
        Int((self*1000).truncatingRemainder(dividingBy: 1000))
    }
}

extension Int {
    var msToSeconds: Double { Double(self) / 1000 }
}

let seconds = 131.531   // 131.531
let time = seconds.minuteSecondMS  //  "2:11.531"
let millisecond = seconds.millisecond    // 531

let ms = 1111
let sec = ms.msToSeconds.minuteSecondMS   // "0:01.111"

Date().description(with: .current)        // "Wednesday, October 21, 2020 at 5:44:51 PM Brasilia Standard Time"
let startOfDay = Calendar.current.startOfDay(for: Date())
let secondsFromStartOfDay = Date().timeIntervalSinceReferenceDate - startOfDay.timeIntervalSinceReferenceDate
secondsFromStartOfDay.hourMinuteSecondMS  // "17:44:51.705"