如何使用NSDateFormatter创建计时器(chrono)?

时间:2015-07-24 01:37:23

标签: ios swift 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。
  • 我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:1)

您可以使用NSDate和NSDateFormatter来获取时间字符串。 创建NSDateFormatter和NSDate的对象,然后将您的时间样式设置为NSDateFormmatter,然后调用stringFromDate获取时间字符串。

    var dateFormatter = NSDateFormatter()
    var date = NSDate(timeIntervalSince1970: interval)
    dateFormatter.dateFormat = "mm-ss"
    dateFormatter.stringFromDate(date)

答案 1 :(得分:1)

您可以使用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. elapsed计算自startDate以来已经过了多长时间。 NSDate()是获取当前日期的便捷方式。
  6. 这就是魔术发生的地方。 NSDateComponentsFormatter将为经过的时间输出正确修剪的String
  7. formattedTime显示在屏幕上
  8. 当用户点击“开始”按钮时,会调用
  9. startButtonPressed()
  10. startDate属性设置为当前日期。
  11. NSTimer每1秒拨打一次tick()
  12. 以下是实践中的截图:

    • 过了四秒
    • 经过一分四秒

    NSDateComponentsFormatter timer