如何在 Swift 5 中将指定的持续时间添加到字符串日期
How to add specified duration to string date in Swift 5
所以我有一个函数可以将指定的本地时间转换为 UTC(时间以字符串形式开始和结束)
我需要为这个时间添加一个持续时间(比如说 1.5 小时),这可能会持续到第二天,所以我相信我需要使用日历,而不是 timeInterval。
我对这是如何完成的有点无能为力,文档不是最好的,我对 Swift 也不是很好。
这是我目前的情况。
import Foundation
func localToUTC(date:String, originTimeZone:String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm"
dateFormatter.timeZone = TimeZone(identifier: originTimeZone)
let dt = dateFormatter.date(from: date)
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm"
return dateFormatter.string(from: dt!)
}
print(localToUTC(date: "05/01/2021 15:37", originTimeZone: "America/Boise"))
需要说明的是,我正在尝试向我的函数添加另一个参数(或者创建一个新函数,这无关紧要),以便为我当前函数输出的 UTC 时间添加持续时间。
为了说明问题,假设航班在当地时间 15:37 起飞(例如博伊西,UTC 转换为 +6)。
所以航班于 2021 年 5 月 1 日 21:37 UTC 起飞。飞行时间为4小时。
我想要 5/2/2021 01:37 UTC 的输出。
只需将飞行持续时间添加到生成的日期对象中即可。另请注意,您不应强制解包结果,因为它可能会使您的应用程序崩溃。确保 return nil 以防您传递无效的字符串。类似于:
func localToUTC(date: String, originTimeZone: String, duration: TimeInterval) -> String? {
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm"
guard let timezone = TimeZone(identifier: originTimeZone) else { return nil }
dateFormatter.timeZone = timezone
guard let dt = dateFormatter.date(from: date) else { return nil }
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
return dateFormatter.string(from: dt.addingTimeInterval(duration))
}
print(localToUTC(date: "05/01/2021 15:37", originTimeZone: "America/Boise", duration: 4 * 60 * 60) ?? "nil")
这将打印
05/02/2021 01:37
所以我有一个函数可以将指定的本地时间转换为 UTC(时间以字符串形式开始和结束)
我需要为这个时间添加一个持续时间(比如说 1.5 小时),这可能会持续到第二天,所以我相信我需要使用日历,而不是 timeInterval。
我对这是如何完成的有点无能为力,文档不是最好的,我对 Swift 也不是很好。
这是我目前的情况。
import Foundation
func localToUTC(date:String, originTimeZone:String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm"
dateFormatter.timeZone = TimeZone(identifier: originTimeZone)
let dt = dateFormatter.date(from: date)
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm"
return dateFormatter.string(from: dt!)
}
print(localToUTC(date: "05/01/2021 15:37", originTimeZone: "America/Boise"))
需要说明的是,我正在尝试向我的函数添加另一个参数(或者创建一个新函数,这无关紧要),以便为我当前函数输出的 UTC 时间添加持续时间。
为了说明问题,假设航班在当地时间 15:37 起飞(例如博伊西,UTC 转换为 +6)。
所以航班于 2021 年 5 月 1 日 21:37 UTC 起飞。飞行时间为4小时。
我想要 5/2/2021 01:37 UTC 的输出。
只需将飞行持续时间添加到生成的日期对象中即可。另请注意,您不应强制解包结果,因为它可能会使您的应用程序崩溃。确保 return nil 以防您传递无效的字符串。类似于:
func localToUTC(date: String, originTimeZone: String, duration: TimeInterval) -> String? {
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm"
guard let timezone = TimeZone(identifier: originTimeZone) else { return nil }
dateFormatter.timeZone = timezone
guard let dt = dateFormatter.date(from: date) else { return nil }
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
return dateFormatter.string(from: dt.addingTimeInterval(duration))
}
print(localToUTC(date: "05/01/2021 15:37", originTimeZone: "America/Boise", duration: 4 * 60 * 60) ?? "nil")
这将打印
05/02/2021 01:37