【问题标题】:How to format elapsedTime start at 00:00:00 instead of the default 07:00:00 in Swift如何格式化 elapsedTime 从 00:00:00 开始,而不是 Swift 中的默认 07:00:00
【发布时间】:2017-11-20 07:44:11
【问题描述】:

我找不到使用 QuartzCore 让秒表显示在 00:00:00 开始的方法。它总是从 07:00:00 开始。

有没有办法将开始时间格式化为 00:00:00?代码如下。

谢谢!!

类:

import Foundation
import QuartzCore

class StopWatch: NSObject{

private var displayLink: CADisplayLink!
private let formatter = DateFormatter()

var callback: (() -> Void)?
var elapsedTime: CFTimeInterval!

override init() {
    super.init()
    self.displayLink = CADisplayLink(target: self, selector: #selector(tick(sender:)))
    displayLink.isPaused = true
    displayLink.add(to: RunLoop.main, forMode: RunLoopMode.commonModes)
    self.elapsedTime = 0.0
    formatter.dateFormat = "HH:mm:ss"
}
convenience init(withCallback callback: @escaping () -> Void) {
    self.init()
    self.callback = callback
}
deinit {
    displayLink.invalidate()
}

func tick(sender: CADisplayLink) {
    elapsedTime = elapsedTime + displayLink.duration
    callback?()
}


func elapsedTimeAsString() -> String {
    return formatter.string(from: Date(timeIntervalSinceReferenceDate:elapsedTime))
}

}

【问题讨论】:

  • 这听起来很像时区问题。你在 GMT+7 吗?尝试将格式化程序的时区设置为 GMT。
  • 感谢您的指点,帮助。我添加了 formatter.timeZone = NSTimeZone(name: "GMT")!作为时区

标签: ios swift quartz-core


【解决方案1】:

如以下评论中所述已更正: 正如上面提到的评论者,这是一个时区问题,因为我位于 GMT +7。我添加了以下代码来解决这个问题:

formatter.timeZone = TimeZone(缩写:“GMT”)!

【讨论】:

  • 不要使用 NS... 类与原生 Swift 结构的桥接使用 TimeZone(abbreviation: "GMT")!
  • 谢谢,这个解决方案肯定更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多