尝试计算时差,但收到否定答案

时间:2019-03-23 08:43:11

标签: swift user-interface elapsedtime

我试图计算两个时间之间的时差(x hrs x mins),当前时间以及用户使用时间选择器设置的时间。

我会收到一个负值,例如-7小时30分钟。

要解决此问题,我已阅读到我将需要包含if语句。但是,我收到以下错误,无法解决: “无法将类型为“日期”的值转换为预期的参数类型为“时间间隔”(又名“双精度”)”

非常感谢您的帮助,谢谢!

func findTimeDiff() {
    let time1 = currentTimeOutlet
    let time2 = alarmTimeOutlet

    let formatter = DateFormatter()
    formatter.dateFormat = "hh:mma"

    let date1 = formatter.date(from: time1!.text!)
    let date2 = formatter.date(from: time2!.text!)

    var elapsedTime = date2!.timeIntervalSince(date1!)
    let hours = floor(elapsedTime / 60 / 60)
    let minutes = floor((elapsedTime - (hours * 60 * 60)) / 60)

    if (date2!) < (date1!) {

        var elapsedTime = ((date2! + 86400000) - date1!)
        let hours = floor(elapsedTime / 60 / 60)
        let minutes = floor((elapsedTime - (hours * 60 * 60)) / 60)
        timeDiffOutlet.text = ("\(Int(hours)) hr and \(Int(minutes)) min")
    }
    else {
        var elapsedTime = date2!.timeIntervalSince(date1!)
        let hours = floor(elapsedTime / 60 / 60)
        let minutes = floor((elapsedTime - (hours * 60 * 60)) / 60)
        timeDiffOutlet.text = ("\(Int(hours)) hr and \(Int(minutes)) min")

    }
}

2 个答案:

答案 0 :(得分:1)

在考虑日期和时间时,应避免使用像这样的硬编码值执行计算。相反,最好使用Calendar类为您提供的方法。

是这样的:

func findTimeDiff2() {
    let time1 = currentTimeOutlet
    let time2 = alarmTimeOutlet

    let formatter = DateFormatter()
    formatter.dateFormat = "hh:mma"

    let date1 = formatter.date(from: time1!.text!)
    let date2 = formatter.date(from: time2!.text!)

    let components = Calendar.current.dateComponents([.hour, .minute], from: date1!, to: date2!)

    timeDiffOutlet.text = "\(abs(components.hour!)) hr and \(abs(components.minute!)) min"
}

这样做意味着将为您处理诸如夏令时之类的情况,尽管在这种情况下,由于您不知道发生警报的日期,因此您将无法知道是否采用夏令时或不。最好使用完整日期而不是仅仅使用时间。

答案 1 :(得分:0)

为什么在(date2!) < (date1!)的情况下尝试使用完全不同的表达式?

尝试更改此行:

var elapsedTime = ((date2! + 86400000) - date1!)

收件人:

var elapsedTime = date1!.timeIntervalSince(date2!)