2015-11-03 197 views
3

我用僞代碼編寫了一些這樣的代碼,因爲我不知道它的語法。我想讓timeLeftLabel.text反映在6個小時後,剩下多少小時,幾分鐘和幾秒鐘。我最大的問題是我不知道如何加減時間。誰能幫我?在Swift中添加和減去時間

var timer = NSTimer() 

func timerResults() { 
    let theDate = NSDate() 
    var endTime = theDate //+ 6 hours 
    let timeLeft = endTime //- theDate 
    timeLeftLabel.text = "\(timeLeft)" 
} 

@IBOutlet weak var timeLeftLabel: UILabel! 
@IBAction func IBbtnUpdateTap(sender: UIButton){ 

timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timerResults"), userInfo: nil, repeats: true) 

} 

回答

4

假設你的部署目標是iOS的8.0或更高版本,您應該使用NSDateComponentsFormatter來格式化串。你想要這樣的事情:

class MyViewController : UIViewController { 

    @IBOutlet weak var timeLeftLabel: UILabel! 

    var targetDate: NSDate? 
    var labelUpdateTimer: NSTimer? 
    var timeLeftFormatter: NSDateComponentsFormatter? 

    @IBAction func startTimerButtonWasTapped() { 
     targetDate = NSDate(timeIntervalSinceNow: 6 * 60 * 60) 
     labelUpdateTimer = NSTimer.scheduledTimerWithTimeInterval(1, 
      target: self, selector: "labelUpdateTimerDidFire:", userInfo: nil, repeats: true) 
     timeLeftFormatter = NSDateComponentsFormatter() 
     timeLeftFormatter?.unitsStyle = .Abbreviated // gives e.g. "1h 20m 34s" 
      // You might prefer .Positional, which gives e.g. "1:20:34" 
     timeLeftFormatter?.allowedUnits = [ .Hour, .Minute, .Second ] 

     labelUpdateTimerDidFire(labelUpdateTimer!) 
    } 

    @objc func labelUpdateTimerDidFire(timer: NSTimer) { 
     let now = NSDate() 
     timeLeftLabel.text = timeLeftFormatter!.stringFromDate(now, 
      toDate: targetDate!) 
     if now.compare(targetDate!) != NSComparisonResult.OrderedAscending { 
      print("times up!") 
      labelUpdateTimer?.invalidate() 
     } 
    } 

} 
+0

你的'@ objc'關鍵字代碼的目的是什麼?有一些具體的目標還是其他的東西? –

+0

在這種情況下它不是必需的,但它是習慣性的。 –

+0

@rob這不適合我。當我按下我的按鈕時,我的文本顯示「5小時59分58秒」,並保持這種狀態,而不是倒計時。有什麼建議麼? – adman

0

這將加6時間:

let future = now.dateByAddingTimeInterval(3600*6) // 1 hour is 3600 seconds 

這將找到的差異:

let difference = future.timeIntervalSinceDate(now) 
+0

永遠不要做第一行。並非所有的小時都有3600秒。但是,第二行對於查找兩個日期之間的秒數是正確的。 – rmaddy

+0

@rmaddy哇,我從來沒有聽說過沒有3600秒的小時。你能提供一些關於這些的更多信息嗎? –

+0

@rmaddy我會更新NSDateComponents,如果他想要一個非常正確的答案。 –