Ios 如何在swift中记录开始和结束时间

Ios 如何在swift中记录开始和结束时间,ios,swift,Ios,Swift,我正在尝试编写一个基本的计时器应用程序,它将记录你点击开始的时间和点击结束的时间,并对它们进行比较。到目前为止,我所做的所有尝试都没有打印时间,默认为其原始定义 let date = Date() let calendar = Calendar.current let hourTime = calendar.component(.hour, from: date) let minutesTime = calendar.component(.minute, from: date) var Tim

我正在尝试编写一个基本的计时器应用程序,它将记录你点击开始的时间和点击结束的时间,并对它们进行比较。到目前为止,我所做的所有尝试都没有打印时间,默认为其原始定义

let date = Date()
let calendar = Calendar.current
let hourTime = calendar.component(.hour, from: date)
let minutesTime = calendar.component(.minute, from: date)

var TimeWhileGone=0

@IBAction func EndTime(_ sender: Any) {
    var button2Alert = UIAlertController(title: "Title", message: "Your Timer have been going for \(minutesTime-TimeWhileGone) minutes!", preferredStyle: UIAlertControllerStyle.alert)
    self.present(button2Alert, animated: true, completion: nil)*/
}

@IBAction func startTime(_ sender: Any) {
    TimeWhileGone=minutesTime
}

你需要两件事,你需要两个时间点来比较,一个开始时间和一个结束时间,我知道听起来很简单,但你似乎错过了这些点

你似乎在记录一个永远不会改变的时间点

因此,当调用startTime时,将startTime属性初始化为now ie Date

调用endTime时,您可以使用Date.timeIntervalSince标记它并计算时间差,它为您提供了一个时间间隔

虽然使用简单的模块化数学来计算格式可能很有诱惑力,但我会避免这种情况,因为间隔越大,就越容易出错

相反,我会使用DateComponents格式

有关更多信息,请看一看-虽然它有点过时,但它可以提供一些有关API如何工作的见解

游戏场 因为这些事情可能有点复杂,我倾向于用操场来测试一些基本的想法,所以下面

let startTime = Date()
Thread.sleep(forTimeInterval: 2.0)
let duration = Date().timeIntervalSince(startTime)

let formatter = DateComponentsFormatter()
formatter.unitsStyle = .abbreviated
formatter.allowedUnits = [ .day, .hour, .minute, .second]

formatter.string(from: duration)

我知道,它最终会展示出令人激动的东西,但它提供了这个想法的种子

哦,太棒了,谢谢!我回家后会试试这个,谢谢你的快速反应,我对使用swift还不熟悉,所以这是一个巨大的帮助!
guard let startTime = startTime else {
    return
}
let duration = Date().timeIntervalSince(startTime)
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .abbreviated
formatter.allowedUnits = [ .day, .hour, .minute, .second]

let durationFormat = formatter.string(from: duration)
let startTime = Date()
Thread.sleep(forTimeInterval: 2.0)
let duration = Date().timeIntervalSince(startTime)

let formatter = DateComponentsFormatter()
formatter.unitsStyle = .abbreviated
formatter.allowedUnits = [ .day, .hour, .minute, .second]

formatter.string(from: duration)