UTC到当地时间 - 错误结果迅速



我知道有很多线程,但是我找不到解决问题的解决方案。也许我看不到解决方案...

我收到一个UTC时间:例如12:50我希望这段时间分别将MEZ转换为用户设备的时区。对于我的例子,我希望13:50,因为ATM是MEZ 1对UTC。

这是我的代码

    //transform date to string
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
    let newDateAsString:String = dateFormatter.string(from: self)
    //is 12:50 UTC 
    //transform date to MEZ respectively to the local device timezone
    let dateFormatterToDate = DateFormatter()
    dateFormatterToDate.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    let timeZone = TimeZone.autoupdatingCurrent.identifier as String
    dateFormatter.timeZone = TimeZone(identifier: timeZone)
    //same result with: dateFormatter.timeZone = NSTimeZone.local
    //result is 11:50 but i would expect 13:50
    if let result = dateFormatterToDate.date(from: newDateAsString) {
        return result
    }

结果11:50是我当前时区中现在的时间。但是我不明白。我明确给出应该转换的日期。有人知道我的错误在哪里?

您要做的转换与您的意图相反。字符串newDateAsString的时间为12:50,没有指定时区,因为您的日期格式字符串不包括时区的格式。当您将dateFormatterToDate的时区设置为MEZ,然后将newDateAsString传递给dateFormatterToDate时,您会说:在Mez中给我一个12:50的Date对象。

默认情况下显示为UTC,因此result显示为11:50,因为Mez中的12:50在UTC中为11:50。

要将日期格式化为本地时区中的字符串,您将使用这样的代码:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.timeZone = NSTimeZone.local
let localTimeZoneDateString = dateFormatter.string(from: self)

相关内容

  • 没有找到相关文章

最新更新