gpt4 book ai didi

swift - 试图计算时差,但收到否定答案

转载 作者:行者123 更新时间:2023-11-28 13:46:47 25 4
gpt4 key购买 nike

我正在尝试计算两个时间、当前时间和用户使用时间选择器设置的时间之间的时间差(x 小时 x 分钟)。

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

为了解决这个问题,我读到我需要包含 if 语句。但是,我收到以下错误并且无法解决:“无法将‘Date’类型的值转换为预期的参数类型‘TimeInterval’(又名‘Double’)”

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

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")

}
}

最佳答案

在涉及日期和时间的情况下,您应该避免使用像这样的硬编码值执行计算。相反,最好使用 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"
}

这样做意味着将为您处理夏令时等情况,但在这种情况下,因为您不知道闹钟发生的日期,您将无法知道夏令时是否适用或不是。最好使用完整日期而不是时间。

关于swift - 试图计算时差,但收到否定答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55312062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com