我正在尝试计算 iOS 中两次 (HH:MM:SS) 之间的差异
I'm trying to calculate the difference between two times (HH:MM:SS) in iOS
我有两个 UIButtons
在两个不同的 UITextFields
中标记时间。
我有一个 UIButton
来计算动作以确定差异。
这是我的代码:
class ViewController: UIViewController {
@IBOutlet weak var timeatf1TextField: UITextField!
@IBOutlet weak var timeatf2TextField: UITextField!
@IBOutlet weak var timediffTextField: UITextField!
@IBAction func markf1Button(_ sender: Any) {
let now = Date()
let formatter = DateFormatter()
formatter.timeZone = TimeZone.current
formatter.dateFormat = "HH:MM:SS"
let dateString = formatter.string(from: now)
timeatf1TextField.text = dateString
}
@IBAction func markf2Button(_ sender: Any) {
let now = Date()
let formatter = DateFormatter()
formatter.timeZone = TimeZone.current
formatter.dateFormat = "HH:MM:SS"
let dateString = formatter.string(from: now)
timeatf2TextField.text = dateString
}
timediffTextField.text = "\((Double(timeatf2TextField.text ??
"0.0") ?? 0.0) - (Double(timeatf1TextField.text ?? "0.0") ?? 0.0))"
我在 timediffTextField.text
操作中得到的结果是 0.0。
感谢您的帮助!
timeatf1TextField
和 timeatf2TextField
不包含双精度数,它们包含表示格式化时间的 String
。
相反,我有两个属性,它们是 Date
类型,标记开始和时间。当调用适当的 markXxx
函数时,您可以将 Date
设置为适当的 属性 (就像您正在做的那样,但是设置为 属性 而不是局部变量)
这意味着您不需要将 String
值解析回 Date
值
然后我会使用 Date#timeIntervalSince(Date)
来计算这些值之间的差异
此外,您可能希望使用的日期格式是 HH:mm:ss
(MM
是月份)
@IBOutlet weak var timeatf1TextField: UITextField!
@IBOutlet weak var timeatf2TextField: UITextField!
@IBOutlet weak var timediffTextField: UITextField!
var dateFormat: DateFormater = {
let formatter = DateFormatter()
formatter.timeZone = TimeZone.current
formatter.dateFormat = "HH:mm:ss"
}()
// Yes, this could be an array
var mark1: Date?
var mark2: Date?
@IBAction func markf1Button(_ sender: Any) {
mark1 = Date()
let dateString = dateFormat.string(from: mark1 ?? Date())
timeatf1TextField.text = dateString
}
@IBAction func markf2Button(_ sender: Any) {
mark2 = Date()
let dateString = dateFormat.string(from: mark2 ?? Date())
timeatf2TextField.text = dateString
}
然后在需要时...
guard let mark1 = mark1, let mark2 = mark2 else {
return
}
let time: TimeInterval = mark2.timeIntervalSince(mark1)
您可以使用 DateComponentsFormatter
之类的东西将生成的持续时间格式化为人类可读的内容
我有两个 UIButtons
在两个不同的 UITextFields
中标记时间。
我有一个 UIButton
来计算动作以确定差异。
这是我的代码:
class ViewController: UIViewController {
@IBOutlet weak var timeatf1TextField: UITextField!
@IBOutlet weak var timeatf2TextField: UITextField!
@IBOutlet weak var timediffTextField: UITextField!
@IBAction func markf1Button(_ sender: Any) {
let now = Date()
let formatter = DateFormatter()
formatter.timeZone = TimeZone.current
formatter.dateFormat = "HH:MM:SS"
let dateString = formatter.string(from: now)
timeatf1TextField.text = dateString
}
@IBAction func markf2Button(_ sender: Any) {
let now = Date()
let formatter = DateFormatter()
formatter.timeZone = TimeZone.current
formatter.dateFormat = "HH:MM:SS"
let dateString = formatter.string(from: now)
timeatf2TextField.text = dateString
}
timediffTextField.text = "\((Double(timeatf2TextField.text ??
"0.0") ?? 0.0) - (Double(timeatf1TextField.text ?? "0.0") ?? 0.0))"
我在 timediffTextField.text
操作中得到的结果是 0.0。
感谢您的帮助!
timeatf1TextField
和 timeatf2TextField
不包含双精度数,它们包含表示格式化时间的 String
。
相反,我有两个属性,它们是 Date
类型,标记开始和时间。当调用适当的 markXxx
函数时,您可以将 Date
设置为适当的 属性 (就像您正在做的那样,但是设置为 属性 而不是局部变量)
这意味着您不需要将 String
值解析回 Date
值
然后我会使用 Date#timeIntervalSince(Date)
来计算这些值之间的差异
此外,您可能希望使用的日期格式是 HH:mm:ss
(MM
是月份)
@IBOutlet weak var timeatf1TextField: UITextField!
@IBOutlet weak var timeatf2TextField: UITextField!
@IBOutlet weak var timediffTextField: UITextField!
var dateFormat: DateFormater = {
let formatter = DateFormatter()
formatter.timeZone = TimeZone.current
formatter.dateFormat = "HH:mm:ss"
}()
// Yes, this could be an array
var mark1: Date?
var mark2: Date?
@IBAction func markf1Button(_ sender: Any) {
mark1 = Date()
let dateString = dateFormat.string(from: mark1 ?? Date())
timeatf1TextField.text = dateString
}
@IBAction func markf2Button(_ sender: Any) {
mark2 = Date()
let dateString = dateFormat.string(from: mark2 ?? Date())
timeatf2TextField.text = dateString
}
然后在需要时...
guard let mark1 = mark1, let mark2 = mark2 else {
return
}
let time: TimeInterval = mark2.timeIntervalSince(mark1)
您可以使用 DateComponentsFormatter
之类的东西将生成的持续时间格式化为人类可读的内容