在Swift中添加和减去时间
我用伪代码编写了一些这样的代码,因为我不知道它的语法。我想让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)
}
假设你的部署目标是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()
}
}
}
这将加6时间:
let future = now.dateByAddingTimeInterval(3600*6) // 1 hour is 3600 seconds
这将找到的差异:
let difference = future.timeIntervalSinceDate(now)
永远不要做第一行。并非所有的小时都有3600秒。但是,第二行对于查找两个日期之间的秒数是正确的。 – rmaddy
@rmaddy哇,我从来没有听说过没有3600秒的小时。你能提供一些关于这些的更多信息吗? –
@rmaddy我会更新NSDateComponents,如果他想要一个非常正确的答案。 –
你的'@ objc'关键字代码的目的是什么?有一些具体的目标还是其他的东西? –
在这种情况下它不是必需的,但它是习惯性的。 –
@rob这不适合我。当我按下我的按钮时,我的文本显示“5小时59分58秒”,并保持这种状态,而不是倒计时。有什么建议么? – adman