import UIKit
import Foundation
let dateString = "2017-08-13T05:10:00Z"
let dateFormatter = ISO8601DateFormatter()
if var date = dateFormatter.date(from: dateString) {
if let newYorkTimeZone = TimeZone(abbreviation: "EDT") {
date.addTimeInterval(TimeInterval(newYorkTimeZone.secondsFromGMT(for: date)))
print("NY time:", date, date.hour())
}
}
if var date = dateFormatter.date(from: dateString) {
if let chiTimeZone = TimeZone(abbreviation: "CDT") {
date.addTimeInterval(TimeInterval(chiTimeZone.secondsFromGMT(for: date)))
print("CHI time:", date, date.hour())
}
}
if let gmt = TimeZone(abbreviation: "GMT") {
if var date = dateFormatter.date(from: dateString) {
print("GMT time:", date, date.hour())
}
}
extension Date {
func hour() -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "h:mm a"
return dateFormatter.string(from: self)
}
}
当我的系统设置为 EDT 时输出:
纽约时间:2017-08-13 01:10:00 +0000 9:10 PM
CHI时间:2017-08-13 00:10:00 +0000 8:10 PM
格林威治标准时间:2017-08-13 05:10:00 +0000 1:10 AM
当我的系统设置为 CDT 时输出:
纽约时间:2017-08-13 01:10:00 +0000 8:10 PM
CHI时间:2017-08-13 00:10:00 +0000 7:10 PM
格林威治标准时间:2017-08-13 05:10:00 +0000 12:10 AM
无论我在哪个时区,这些时间不应该保持不变吗?我没有使用任何与TimeZone.current
.
注意:我知道使用 是更好的做法TimeZone.secondsFromGMT:
,但是使用 abbreviation 参数可以更容易地阅读此问题中发生的情况。