如何使用 NSDateFormatter 创建计时器(计时)?
How to create a timer (chrono) with NSDateFormatter?
这是一个带有分钟和秒的常规计时器 (chrono)。
它工作正常,但有没有办法用 NSDateFormatter 获得相同的结果。
var min = 0
var sec = 0
func stringFromTimeInterval(interval: NSTimeInterval) -> String {
let interval = Int(interval)
let seconds = interval % 60
let minutes = (interval / 60)
return String(format: "%2d:%02d",minutes, seconds)
}
func updateTimer(){
sec++
self.timeElapsed.text = self.stringFromTimeInterval(Double(sec))
}
这是我的尝试:
var sec = 0
func theTime(interval:NSTimeInterval) -> String {
var dateFormatter = NSDateFormatter()
var date = NSDate(timeIntervalSince1970: NSTimeInterval())
dateFormatter.dateFormat = "mm:ss"
return dateFormatter.stringFromDate(date)
}
func updateTheTime(){
sec++
self.newTimer.text = self.theTime(Double(sec))
}
- 我做错了,因为它总是 00:00。
- 我怎样才能让它发挥作用?
您可以使用 NSDate 和 NSDateFormatter 来获取时间字符串。
创建一个 NSDateFormatter 和 NSDate 的对象,然后将你的时间样式设置为 NSDateFormmatter,然后调用 stringFromDate 获取时间字符串。
var dateFormatter = NSDateFormatter()
var date = NSDate(timeIntervalSince1970: interval)
dateFormatter.dateFormat = "mm-ss"
dateFormatter.stringFromDate(date)
您可以使用 NSDateComponentsFormatter
.
class ViewController: UIViewController {
// 1
var startDate: NSDate!
// 2
@IBOutlet weak var timerLabel: UILabel!
// 3
func tick() {
// 4
let elapsed = NSDate().timeIntervalSinceDate(startDate)
// 5
let formattedTime = NSDateComponentsFormatter().stringFromTimeInterval(elapsed)
// 6
timerLabel.text = formattedTime
}
// 7
@IBAction func startButtonPressed() {
// 8
startDate = NSDate()
// 9
NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "tick", userInfo: nil, repeats: true)
}
}
这是 Swift 代码中发生的事情:
startDate
属性会在startButtonPressed()
初始化
-
timerLabel
将显示输出。这是一个标准 UILabel
.
tick()
将从 NSTimer 调用
elapsed
计算自 startDate
以来经过了多少时间。 NSDate()
是获取当前日期的简便方法。
- 这就是魔法发生的地方。
NSDateComponentsFormatter
将针对经过的时间输出正确修剪的 String
。
- 屏幕显示
formattedTime
startButtonPressed()
在用户点击“开始”按钮时调用。
-
startDate
属性 设置为当前日期。
- 一个
NSTimer
会每1秒调用一次tick()
。
这是实际使用时的截图:
- 四秒过去了
- 一分四秒过去了
这是一个带有分钟和秒的常规计时器 (chrono)。 它工作正常,但有没有办法用 NSDateFormatter 获得相同的结果。
var min = 0
var sec = 0
func stringFromTimeInterval(interval: NSTimeInterval) -> String {
let interval = Int(interval)
let seconds = interval % 60
let minutes = (interval / 60)
return String(format: "%2d:%02d",minutes, seconds)
}
func updateTimer(){
sec++
self.timeElapsed.text = self.stringFromTimeInterval(Double(sec))
}
这是我的尝试:
var sec = 0
func theTime(interval:NSTimeInterval) -> String {
var dateFormatter = NSDateFormatter()
var date = NSDate(timeIntervalSince1970: NSTimeInterval())
dateFormatter.dateFormat = "mm:ss"
return dateFormatter.stringFromDate(date)
}
func updateTheTime(){
sec++
self.newTimer.text = self.theTime(Double(sec))
}
- 我做错了,因为它总是 00:00。
- 我怎样才能让它发挥作用?
您可以使用 NSDate 和 NSDateFormatter 来获取时间字符串。 创建一个 NSDateFormatter 和 NSDate 的对象,然后将你的时间样式设置为 NSDateFormmatter,然后调用 stringFromDate 获取时间字符串。
var dateFormatter = NSDateFormatter()
var date = NSDate(timeIntervalSince1970: interval)
dateFormatter.dateFormat = "mm-ss"
dateFormatter.stringFromDate(date)
您可以使用 NSDateComponentsFormatter
.
class ViewController: UIViewController {
// 1
var startDate: NSDate!
// 2
@IBOutlet weak var timerLabel: UILabel!
// 3
func tick() {
// 4
let elapsed = NSDate().timeIntervalSinceDate(startDate)
// 5
let formattedTime = NSDateComponentsFormatter().stringFromTimeInterval(elapsed)
// 6
timerLabel.text = formattedTime
}
// 7
@IBAction func startButtonPressed() {
// 8
startDate = NSDate()
// 9
NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "tick", userInfo: nil, repeats: true)
}
}
这是 Swift 代码中发生的事情:
startDate
属性会在startButtonPressed()
初始化
-
timerLabel
将显示输出。这是一个标准UILabel
. tick()
将从 NSTimer 调用
elapsed
计算自startDate
以来经过了多少时间。NSDate()
是获取当前日期的简便方法。- 这就是魔法发生的地方。
NSDateComponentsFormatter
将针对经过的时间输出正确修剪的String
。 - 屏幕显示
formattedTime
startButtonPressed()
在用户点击“开始”按钮时调用。-
startDate
属性 设置为当前日期。 - 一个
NSTimer
会每1秒调用一次tick()
。
这是实际使用时的截图:
- 四秒过去了
- 一分四秒过去了