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
CHI 時間: 2017-08-13 00:10:00 +0000 8:10 PM
GMT 時間: 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
GMT 時間: 2017-08-13 05:10:00 +0000 12:10 AM
私がいるタイムゾーンに関係なく、これらの時間は同じままであるべきではありませんか? に関連するものは使用していませんTimeZone.current
。
注: を使用TimeZone.secondsFromGMT:
することをお勧めしますが、省略形パラメーターを使用すると、この質問で何が起こっているかを読みやすくなります。