【发布时间】:2019-02-12 16:56:55
【问题描述】:
后端为我提供格式为“2018-09-07 01:00:00 am”的日期。该日期的时区为 UTC。现在我必须将其转换为本地时区。我正在使用的功能是:
func getLocalDate(dateString: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss a"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.locale = Locale.current
let dt = dateFormatter.date(from: dateString)
dateFormatter.timeZone = TimeZone.current
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss aZ"
return dateFormatter.string(from: dt!)
}
这样,日期首先转换为 UTC,然后转换为本地时区,所以我没有得到想要的结果。如何在不进行任何转换的情况下将该日期的时区设置为 UTC?
编辑: 我得到的输出是 2018-09-07 05:45:00 AM+0545 但预期的输出是 2018-09-07 06:45:00 AM+0545
【问题讨论】:
-
你得到了什么结果,预期的结果是什么?你在哪个时区?
-
在创建 UTC 日期时删除
dateFormatter.locale = Locale.current。 -
您希望
hh而不是HH12 小时的上午/下午时间。HH是 24 小时时间 -
您可以将 +0000 连接到接收到的字符串,并使用“yyyy-MM-dd HH:mm:ss a Z”日期格式将结果字符串转换为日期。注意,在这一步您不需要设置日期格式化程序的时区和本地。第二步依然有效。
-
这里的问题是
TimeZone(abbreviation: "UTC")实际上意味着你从服务器的时间应该是:2018-09-07 01:00:00 am+0100。传递2018-09-07 01:00:00 am你的意思是日期格式化程序的“2018-09-07 01:00:00 am+0000”