Swift - Convert Milliseconds into Minutes, Seconds and Milliseconds

萝らか妹 提交于 2019-11-27 02:27:49

问题


I am writing a racing app and want to convert a large number of milliseconds into minutes:seconds.milliseconds (for example, 1:32.361). At the moment I just do it through maths (minutes / 60000), then get remainder and divide further, etc., but i find that it is off every now and then by 1 millisecond. I know this might not sound like a big deal, but I tried to find the average of 1:32.004 and 1:32.004 and it returned 1:32.003, which means it gets put in incorrectly and the rest of the app can't deal with it.

Is there a way to use NSDate or NSDateFormatter or something like that to format the milliseconds into MM:ss.mmm?

I have looked at these sources but not found the answer:

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/


回答1:


You can create a TimeInterval extension to format your elapsed time as follow:

Xcode 8.3.3 • Swift 3.1

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

extension Int {
    var msToSeconds: Double {
        return 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"


来源:https://stackoverflow.com/questions/30771820/swift-convert-milliseconds-into-minutes-seconds-and-milliseconds

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!