为什么我的计时器从 4:00:00 开始?

Why does my timer starts at 4:00:00 ?

我的计时器从 4:00:00 开始,而我希望它从 0:00:00 开始。

一开始我使用 "mm:ss" 作为 dateFormatter,但这是有问题的,因为一旦我的计时器达到 60 分钟,它就会从 0 重新开始。

我希望我的计时器持续超过 60 分钟,所以我添加了 "hh:mm:ss",但现在我的计时器开始于 4:00:00 而不是 0:00:00。

var timer = NSTimer()
var sec = 0

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateTheTime"), userInfo: nil, repeats: true)
  }

func theTime(interval:NSTimeInterval) -> String {
    var dateFormatter = NSDateFormatter()
    var date = NSDate(timeIntervalSince1970: interval)
    dateFormatter.dateFormat = "h:mm:ss"
    return dateFormatter.stringFromDate(date)
  }

func updateTheTime(){
    sec++
    self.timeElapsed.text = self.theTime(Double(sec))
  }

您可以通过为格式化程序指定时区来解决此问题:

 dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)

不过,坦率地说,我建议不要自己手动计算秒数,而是保存开始时间,然后使用 NSDateComponentsFormatter 格式化一个漂亮的计数器:

var timer: NSTimer?
var startTime: NSDate!

var formatter: NSDateComponentsFormatter = {
    let _formatter = NSDateComponentsFormatter()
    _formatter.allowedUnits = .CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond
    _formatter.zeroFormattingBehavior = .Pad
    return _formatter
}()

func startTimer() {
    startTime = NSDate()
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "handleTimer:", userInfo: nil, repeats: true)
}

func stopTimer() {
    timer?.invalidate()
    timer = nil
}

func handleTimer(timer: NSTimer) {
    timeElapsed.text = formatter.stringFromDate(startTime, toDate: NSDate())
}