【发布时间】:2017-10-02 18:34:19
【问题描述】:
背景
我需要将格式为“HH:mm”的时间字符串从UTC转换为本地时区。例如,如果 UTC 时间是 09:00,则本地时间(斯德哥尔摩/欧洲)应该提前两个小时。
问题
当我将 09:00 (UTC) 转换为斯德哥尔摩/欧洲时间时,我得到 10:00。应该是 11:00。
func UTCToLocal(date:String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let dt = dateFormatter.date(from: date)
dateFormatter.timeZone = TimeZone.current //Stockholm/Europe
return dateFormatter.string(from: dt!)
}
print(UTCToLocal(date: "09:00")) //prints 10:00
为什么时区与想象的不同?
【问题讨论】:
-
打印
dt。用它的输出更新你的问题。很可能是某个旧日期导致了您的问题。 -
不相关但为什么将
dateFormat两次设置为相同的格式?为什么要在date上使用字符串插值?就做let dt = dateFormatter.date(from: date)
标签: swift date timezone nsdate utc