从 UTC 转换为本地时区会给出错误的结果
Convert from UTC to local timezone give wrong result
背景
我需要将格式为 "HH:mm" 的时间字符串从 UTC 转换为本地时区。例如,如果 UTC 时间是 09:00,当地时间 (Stockholm/Europe) 应该提前两个小时。
问题
当我将 09:00 (UTC) 转换为 Stockholm/Europe 时,我得到 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
为什么时区与预期的不同?
您只指定了时间,没有指定日期,因此转换为“09:00”
到日期“2000-01-01 09:00:00 +0000”。当时斯德哥尔摩还没有实行夏令时,当地时间是10:00.
如果你想要当天的转换那么你可以设置
dateFormatter.defaultDate = Date()
背景
我需要将格式为 "HH:mm" 的时间字符串从 UTC 转换为本地时区。例如,如果 UTC 时间是 09:00,当地时间 (Stockholm/Europe) 应该提前两个小时。
问题
当我将 09:00 (UTC) 转换为 Stockholm/Europe 时,我得到 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
为什么时区与预期的不同?
您只指定了时间,没有指定日期,因此转换为“09:00” 到日期“2000-01-01 09:00:00 +0000”。当时斯德哥尔摩还没有实行夏令时,当地时间是10:00.
如果你想要当天的转换那么你可以设置
dateFormatter.defaultDate = Date()