我的计时器从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))
}
答案 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())
}