【问题标题】:How to convert TimeInterval into Minutes, Seconds and Milliseconds in Swift如何在 Swift 中将 TimeInterval 转换为分钟、秒和毫秒
【发布时间】:2023-03-17 14:27:01
【问题描述】:

我正在编写一个赛车应用程序,并且想将大量毫秒转换为分钟:seconds.milliseconds(例如,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/

【问题讨论】:

  • 如果没有看到您的代码,很难判断为什么“时不时”会得到不精确的结果......毫秒是如何表示的(作为整数或浮点数)?你如何转换?如何计算平均值?

标签: swift date time


【解决方案1】:

您可以创建一个 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"

【讨论】:

  • 如果还有几个小时,那么它应该显示它,如果没有然后跳过它
  • @user25 OP 问题是关于分钟、秒和毫秒的具体问题。您可以根据需要调整代码,
猜你喜欢
  • 2018-11-16
  • 1970-01-01
  • 2014-02-13
  • 2012-09-27
  • 2010-10-12
  • 1970-01-01
  • 2013-01-12
相关资源
最近更新 更多