swift - 从 UTC 转换为本地时区会给出错误的结果

标签 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

为什么时区与预期的不同?

最佳答案

您只指定了时间,没有指定日期,因此转换为“09:00” 到日期“2000-01-01 09:00:00 +0000”。当时斯德哥尔摩还没有实行夏令时,本地时间是 10:00。

如果你想要当天的转换那么你可以设置

dateFormatter.defaultDate = Date()

关于swift - 从 UTC 转换为本地时区会给出错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46531583/

相关文章:

ios - 点击后如何禁用按钮几秒钟

swift - Swift 类内部的变量声明

java - android中从 "yyyy-MM-dd hh:mm:ss.SSS"----------> "hh:mm aa"解析日期和时间

php - 在两个日期之间搜索并按月份排序

java - 使用 Joda 时间库从 UTC 到 IST 的转换在 JAVA 中返回相同的值

r - 处理我们切换到夏令时和返回的日期

xcode - 视差滚动 SpriteKit

swift - Realm swift : Retrieved Realm Object properties not populated to instance methods [Swift]

javascript - Jquery Datepicker 日期格式在 Asp.net 中不起作用

java - 将数据库时间转换为 IST 日期时间