从UTC转换为本地时区会产生错误的结果

时间:2017-10-02 18:34:20

标签: swift date timezone nsdate utc

背景
我需要用格式转换时间字符串:" 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

为什么时区与它想象的不同?

1 个答案:

答案 0 :(得分:3)

您只指定了一个时间,但没有指定任何一天,因此" 09:00"被转换 至日期" 2000-01-01 09:00:00 + 0000"。那时斯德哥尔摩的夏令时没有活动,当地时间是10点。

如果您想要当天的转化,则可以设置

dateFormatter.defaultDate = Date()