iOS日期时区转换不起作用。

3
在我的测试环境中,我正在测试日期时间的转换,但似乎无法成功转换:
import UIKit

let dateString = "2017-12-01 10:00:00 +0000"

print("original date = \(dateString)")

var formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
formatter.timeZone = TimeZone(identifier: "Asia/Shanghai")

if let date = formatter.date(from: dateString) {
    print("converted date = \(date)")
}
print("test")

输出结果如下:
original date = 2017-12-01 10:00:00 +0000
converted date = 2017-12-01 10:00:00 +0000
test

我期望被转换的日期显示类似于2017-12-01 18:00:00 +0800(因为上海比UTC 00:00:00快8小时)。

首先,您必须提及日期来自哪个时区。 - Rocky Balboa
1
我认为 +0000 已经代表了协调世界时(UTC),对吗? - Zhang
2个回答

4
请尝试以下操作:
let dateString = "2017-12-01 10:00:00 +0000"

print("original date = \(dateString)")

var formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
formatter.timeZone = TimeZone.init(abbreviation: "UTC")

if let date = formatter.date(from: dateString) {
    formatter.timeZone = TimeZone(identifier: "Asia/Shanghai")
    let localTime = formatter.string(from: date)
    print(localTime)
}
print("test")

输出:

original date = 2017-12-01 10:00:00 +0000
2017-12-01 18:00:00 +0800
test

3
仅有一个问题:为什么我们必须设置两次时区? - Hardy_Germany

0

GMT: formatter.timeZone = TimeZone(abbreviation: NSTimeZone.local.abbreviation()!)

UTC: formatter.timeZone = TimeZone(abbreviation: NSTimeZone.default.abbreviation()!)

为了显示本地日期时间,我使用GMTTimeZone。


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