我知道有很多线程,但是我找不到解决问题的解决方案。也许我看不到解决方案...
我收到一个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)