これは本当に簡単な質問ですが、私はその周りに私の頭を包んでいるようです。スウィフト - タイムゾーンが1時間/秒ずれて表示されます.FromGMTが間違っています
タイムゾーンがEDT(GMT-4)の場合、GMTの04:00は00:00ではなく23:00になるのはなぜですか?
// The offset is -4 hours
let offsetFromGMT = Calendar.current.timeZone.secondsFromGMT()/60/60
// 2017-03-12 04:00
var destinationComponents = DateComponents()
destinationComponents.timeZone = TimeZone(secondsFromGMT: 0)
destinationComponents.year = 2017
destinationComponents.month = 03
destinationComponents.day = 12
destinationComponents.hour = -offsetFromGMT // 4 hours
// Why is this 2017-03-11 23:00 and not 2017-03-12 00:00?
let date = Calendar.current.date(from: destinationComponents)!
// Outputs 23
Calendar.current.dateComponents([.hour], from: date).hour
'print(date)'は '2017-03-12 04:00:00 + 0000'と表示されます。 - あなたの地域でその日に夏時間が有効かどうかによって、あなたの地域のタイムゾーンで '2017-03-12 00:00'または' 2017-03-11 23:00'になることがあります。 - 'Calendar.current.timeZone.identifier'は何を印刷しますか? –
"America/New_York"を印刷し、print(date)は2017-03-12 04:00:00 +0000を表示します。はい、なぜ夏時間は秒間に含まれていないのですか?その場合、FromGMT()? –
'secondsFromGMT()'は現在のGMTオフセットです。 DSTを含む、指定された日付のGMTオフセットを返す 'secondsFromGMT(for:date)'という別の関数があります。 - あなたは実際に何を達成しようとしていますか? –