如何使用 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))
  }

您可以使用 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 代码中发生的事情:

  1. startDate属性会在startButtonPressed()
  2. 初始化
  3. timerLabel 将显示输出。这是一个标准 UILabel.
  4. tick() 将从 NSTimer
  5. 调用
  6. elapsed 计算自 startDate 以来经过了多少时间。 NSDate() 是获取当前日期的简便方法。
  7. 这就是魔法发生的地方。 NSDateComponentsFormatter 将针对经过的时间输出正确修剪的 String
  8. 屏幕显示formattedTime
  9. startButtonPressed() 在用户点击“开始”按钮时调用。
  10. startDate 属性 设置为当前日期。
  11. 一个NSTimer会每1秒调用一次tick()

这是实际使用时的截图:

  • 四秒过去了
  • 一分四秒过去了