如何将日期从UTC转换为本地时间和从本地时间转换为UTC?

4
我想把日期从本地时间转换为UTC时间或从UTC时间转换为本地时间。
例如,如果Apr 1, 2015, 12:00 PM是UTC时间,
那么Apr 1, 2015, 5:30 PM就是我的本地时间,但我得到的结果却是相反的。
let dateFormatter2 = DateFormatter()
dateFormatter2.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"[![enter image description here][1]][1]
dateFormatter2.timeZone = NSTimeZone.local
let date2 = dateFormatter2.date(from: "2015-04-01T12:00:00")


dateFormatter2.timeZone = NSTimeZone(name: "UTC")! as TimeZone
let date3 = dateFormatter2.date(from: "2015-04-01T12:00:00")

我得到的是UTC时间为2015年4月1日下午5:30,本地时间为2015年4月1日中午12:00

enter image description here


在Swift中,当Foundation类型有本地的Swift替代品时,请不要使用它们。请使用TimeZone代替NSTimeZone - Dávid Pásztor
3个回答

3
最终这个对我有用。
let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        dateFormatter.timeZone = NSTimeZone(name: "UTC")! as TimeZone
        let date = dateFormatter.date(from: "2015-04-01 12:00:00")
        print("UTC time",date!)

        dateFormatter.timeZone = NSTimeZone.local
        let timeStamp = dateFormatter.string(from: date!)

        print("Local time",timeStamp)

0
尝试这个:
let dateFormatter2 = DateFormatter()
dateFormatter2.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter2.timeZone = NSTimeZone.local
dateFormatter2.locale = Locale(identifier: "en_US_POSIX")
let date2 = dateFormatter2.date(from: "2015-04-01T12:00:00")


dateFormatter2.timeZone = TimeZone(identifier: "UTC")
let date3 = dateFormatter2.date(from: "2015-04-01T12:00:00")

本地时间:“2015年4月1日,中午12:00”;世界协调时间:“2015年4月1日,下午5:30”,应该互换。 - Jayprakash Singh
如果本地时间是12:00 PM,则UTC时间应为“Apr 1, 2015, 6:30 AM”。 - Jayprakash Singh
@JayprakashSingh 你的设备设置的时区是什么? - Sneha
我正在使用模拟器并显示UTC +5:30的系统时间。 - Jayprakash Singh
1
@JayprakashSingh,Sneha的代码在模拟器中也可以运行,我已经检查过了。 - Dixit Akabari
显示剩余5条评论

0

本地时区始终基于已为您的应用程序设置的默认时区。

来自苹果文档

返回一个将所有消息转发到当前应用程序的默认时区的对象。

尝试使用 NSTimeZone.system。这将始终确保它提供了在iOS设置中由用户设置的时区。


仍然无法工作,仍然得到相同的结果。 - Jayprakash Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接