Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I';我正在计算iOS中两次(HH:MM:SS)之间的差值_Ios_Swift_Uitextfield_Nsdateformatter - Fatal编程技术网

I';我正在计算iOS中两次(HH:MM:SS)之间的差值

I';我正在计算iOS中两次(HH:MM:SS)之间的差值,ios,swift,uitextfield,nsdateformatter,Ios,Swift,Uitextfield,Nsdateformatter,我有两个ui按钮,它们在两个不同的ui文本字段中标记时间。 我有一个ui按钮来计算动作以确定差异 这是我的密码: class ViewController: UIViewController { @IBOutlet weak var timeatf1TextField: UITextField! @IBOutlet weak var timeatf2TextField: UITextField! @IBOutlet weak var timediffTextField: UITextFiel

我有两个
ui按钮
,它们在两个不同的
ui文本字段
中标记时间。 我有一个
ui按钮
来计算动作以确定差异

这是我的密码:

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
不包含双精度,它们包含表示格式化时间的
字符串

相反,我会有两个属性,它们是标记开始和时间的
Date
类型。调用相应的
markXxx
函数时,您可以将
Date
设置为相应的属性(就像您正在做的那样,但设置为属性而不是局部变量)

这意味着您不需要将
字符串
值解析回
日期

然后我将使用
Date#timeIntervalSince(Date)
来计算这些值之间的差异

此外,您可能希望使用的日期格式是
HH:mm:ss
mm
是月)

然后在需要的时候

guard let mark1 = mark1, let mark2 = mark2 else {
    return
}
let time: TimeInterval = mark2.timeIntervalSince(mark1)

您可以使用类似的方法将结果持续时间格式化为人类可读的格式

HH:mm:ss
是正确的格式<代码>毫米
为月份
SS
是小数秒。谢谢!我来试一试。
guard let mark1 = mark1, let mark2 = mark2 else {
    return
}
let time: TimeInterval = mark2.timeIntervalSince(mark1)