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

时间:2015-07-27 21:31:50

标签: ios swift nsdate nstimer nsdateformatter

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

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

我希望我的计时器能够持续超过60分钟,所以我添加了#34; 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))
  }

1 个答案:

答案 0 :(得分:1)

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

 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())
}