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

标签 ios swift nsdate nstimer nsdateformatter

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

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

我希望我的计时器持续超过 60 分钟,所以我添加了“hh:mm:ss”,但现在我的计时器从 0:00:00 开始,而不是 4: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())
}

关于ios - 为什么我的计时器从 4 :00:00 ? 开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31663683/

相关文章:

iphone - 当没有单元格存在时单击 UITableView 的方法,以便键盘将关闭

ios - iPod/iPhone USB 产品 ID

ios - 无法在 UIPickerView 中转换异常类型的值

ios - 如何在 UserDefaults 中保存和读取 Facebook AccessToken?

iphone - 让本地通知振动但不显示文本

ios - 从托管 View Controller 委托(delegate) SwiftUI View

json - 如何获取 Alamofire 函数结果(完成)并将其设置为稍后可以在 Swift 3.1 中的代码中轻松调用的值?

iOS:将任何 GMT 转换为印度时间格式 GMT + 5:30

iphone - 如何在 Swift 中使用 CoreData 获取 n 天前的项目?

iphone - 在 cocoa/iPhone 中将纪元时间转换为 NSDate