我试图计算iOS

时间:2018-05-04 03:25:36

标签: ios swift uitextfield nsdateformatter

我有两个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。 我感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

timeatf1TextFieldtimeatf2TextField不包含双打,它们包含代表格式化时间的String个。

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

这意味着您不需要将String值解析回Date

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

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

@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之类的内容将生成的持续时间格式化为人类可读的