-1
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:することをお勧めしますが、省略形パラメーターを使用すると、この質問で何が起こっているかを読みやすくなります。

4

2 に答える 2