gpt4 book ai didi

swift - 使用 Swift 将 UTC 日期转换为本地时间 : hours added instead of hours removed

转载 作者:行者123 更新时间:2023-11-30 11:16:29 35 4
gpt4 key购买 nike

我正在尝试将 UTC 日期转换为当前时区,但我注意到一个时间问题。

我在塔希提岛/法属波利尼西亚 (UTC-10),当前时间(使用格式:yyyy/MM/dd HH:mm:ss)是:2018/08/05 06:45 :00

Google 表示 UTC 时间为:2018/08/05 16:45:00

使用下面的代码,结果为:2018/08/06 02:45:42 +0000(后天)而不是 2018/08/05 06:45:42 + 0000(今天)。

将 Date() 转换为当前时区添加 10 小时,而不是删除 10 小时

我的错误在哪里?

swift 3

import Foundation

extension Date {

var toLocalTimezone : Date {

let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd' 'HH:mm:ss"
formatter.timeZone = TimeZone(secondsFromGMT:0) // UTC
let defaultTimeZoneStr = formatter.string(from: self)

let dateFormatter = DateFormatter()
formatter.timeZone = TimeZone.current // Local
dateFormatter.dateFormat = "yyyy/MM/dd' 'HH:mm:ss"

return dateFormatter.date(from:defaultTimeZoneStr)!

}

}

debugPrint("\(TimeZone.current)")
debugPrint("Locale time : \(Date().toLocalTimezone.toFormat(format: DateFormats.yyyyMMddHHmmss))" )

结果:

"Current timezone : Pacific/Tahiti (current)"

"Locale time : 2018-08-06 02:45:42"

而不是:

"Locale time : 2018-08-05 06:45:42"

最佳答案

其实很简单。 DateFormattertimeZone 属性告诉 DateFormatterDate 生成字符串的时区应该位于OR您尝试将转换为日期的字符串所在的时区。

这对您来说意味着什么?

  let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd' 'HH:mm:ss"
formatter.timeZone = TimeZone(secondsFromGMT:0) // UTC
let defaultTimeZoneStr = formatter.string(from: self)

这意味着您正在将 Date 格式化为 String,并且生成的 String 将位于 TimeZone(secondsFromGMT:0) 中

另一方面:

  let dateFormatter = DateFormatter()
formatter.timeZone = TimeZone.current // Local
dateFormatter.dateFormat = "yyyy/MM/dd' 'HH:mm:ss"

return dateFormatter.date(from:defaultTimeZoneStr)!

您告诉格式化程序您在 TimeZone.current 中有一个String,它将尝试从中创建一个Date

Date 始终为 GMT+0,您应该使用其他 API (DateFormatter) 将其转换为输出格式和时区。

我的理解是,您正在尝试创建一个函数,该函数将使用自定义格式和用户时区输出格式化为 StringDate 。这是我相信您正在寻找的片段:

extension Date {
func format(_ format: String) -> String {
let formatter = DateFormatter()
formatter.dateFormat = format
formatter.timeZone = TimeZone.current // Local
return formatter.string(from: self)
}
}

关于swift - 使用 Swift 将 UTC 日期转换为本地时间 : hours added instead of hours removed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51696482/

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