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年8月13日1時10分零零秒+0000 9:10 PM
CHI時間:2017年-08-13 00:10:00 +0000下午8:10
GMT時間:2017年8月13日五點10分00秒+0000上午01時10
輸出,而我的系統設置爲CDT:
紐約時間:2017年8月13日1時10分〇〇秒+0000下午8:10
CHI時間:2017年8月13日00: 10:00 +0000 7:10 PM
GMT時間:2017年8月13日5點10分00秒+0000凌晨00:10
不宜這些時間保持不變,無論什麼我在哪個時區?我沒有使用與TimeZone.current
相關的任何內容。
注:我知道最好使用TimeZone.secondsFromGMT:
,但使用縮寫參數可以更容易地閱讀本問題中發生的情況。
你的代碼沒有意義。可可日期對象是整個地球上的瞬間。我寫這篇文章的時間是美國東部時間下午1點左右,中央時間下午12點左右。爲什麼同一個「Date」對象在不同時區顯示爲同一時間? –
您應該使用設置爲所需時區的日期格式化程序在當地時間表示該日期。 –
您的兩組輸出之間唯一不同的是調用'hour'和'hour'函數的結果是基於您當前的語言環境和當前時區。所以當你改變系統的時區時,這些值當然會改變。 – rmaddy