【发布时间】:2021-01-21 01:55:09
【问题描述】:
我正在使用此函数将 UTC 时间转换为我的本地时间戳。
func UTCToLocal(date:String, timeZone: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "H:mm:ss"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let dt = dateFormatter.date(from: date)
dateFormatter.timeZone = TimeZone(identifier: timeZone)
dateFormatter.dateFormat = "h:mm a"
return dateFormatter.string(from: time)
}
但这不会检查 DST。所以,我得到一小时的差异。谁能帮我解决这个问题的一些通用解决方案?
感谢 Leo 解决了这个问题。我已将功能更新为:
func UTCToLocal(date:String, timeZone: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
let dt = dateFormatter.date(from: date)
dateFormatter.timeZone = TimeZone(identifier: timeZone)
dateFormatter.dateFormat = "dd-MM-yyyy hh:mm aa"
return dateFormatter.string(from: dt!)
}
现在函数参数中的日期字符串具有这种格式“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”的值。这样就解决了问题。
【问题讨论】:
-
您能否举例说明您获得“一小时差异”的日期和时区?
-
iphone上的时间是准确的。但我的应用显示时间错误。
-
与您手机的时区无关。你给
UTCToLocal传递了什么参数?你期望它返回什么?它实际上返回了什么? -
好的,我为函数传递的值是 date = "108:11:00" 和 timeZone = "America/Toronto"。我从 TimeZone.current.identifier 得到这个 timeZone 我得到的响应是凌晨 3:11
-
我期待的回复是凌晨 4 点 11 分。
标签: swift timestamp utc localtime datetime-conversion