Я пытаюсь вычислить разницу между двумя разами (ЧЧ: ММ: СС) в iOS - PullRequest
0 голосов
/ 04 мая 2018

У меня есть два 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 голосов
/ 04 мая 2018

timeatf1TextField и timeatf2TextField не содержат двойников, они содержат String s, представляющие форматированное время.

Вместо этого у меня было бы два свойства типа 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, чтобы отформатировать полученную длительность во что-нибудь удобочитаемое для человека

...