为什么我的计时器从 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())
}
我的计时器从 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())
}