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に設定されている間:異なる時間帯で異なる時間が解釈されるのはなぜですか?
NY時間:2017年8月13日午前1時10分00秒0000 21:10
CHI時間:2017 -08-13夜12時10分00秒0000 20:10
GMT時間:2017年8月13日五時10分00秒0000午前1時10 AM
出力私のシステムはCDTに設定されている間:
NY時間:2017年8月13日午前1時10分00秒0000 20:10
CHI時間:2017年8月13日00: 10時00 0000 19:10
GMT時間:2017年8月13日午前5時10分00秒0000 0:10
は、これらの時間はどんな同じままないべきではありません私がいるタイムゾーン? TimeZone.current
に関連するものは使用していません。
注:TimeZone.secondsFromGMT:
を使用する方が良いことがわかりますが、abbreviationパラメータを使用すると、この問題で起こっていることを読みやすくなります。
あなたのコードは意味をなさない。ココアの日付オブジェクトは、瞬時にすべての惑星を横切っています。私がこれを書いているように、それはEDTの午後1時頃、そして中央午後12時頃です。なぜ同じ 'Date'オブジェクトが異なる時間帯で同じ時刻を表示するのでしょうか? –
ローカル日付でその日付を表すには、希望のタイムゾーンに設定された日付フォーマッタを使用する必要があります。 –
2つの出力セットの間で唯一異なるのは、 'hour'呼び出しの結果と' hour'関数は現在のロケールと現在のタイムゾーンに基づいています。もちろん、これらの値はシステムのタイムゾーンを変更したときに変更されます。 – rmaddy