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)
}
}
sortie alors que mon système est réglé sur EDT:Pourquoi les temps sont-ils interprétés différemment selon les fuseaux horaires?
heure de New York: 13/08/2017 01:10:00 +0000 21:10
temps CHI: 2017 -08 à 13 00:10:00 +0000 20:10
heure GMT: 13/08/2017 05:10:00 +0000 01:10
sortie alors que mon système est réglé sur CDT:
heure de New York: 13/08/2017 01:10:00 +0000 20:10
CHI temps: 13/08/2017 00: 10:00 +0000 19:10
heure GMT: 13/08/2017 05:10:00 +0000 00:10
Si pas ces temps restent les mêmes, peu importe ce que fuseau horaire dans lequel je suis? Je n'utilise aucun élément lié à TimeZone.current
.
Remarque: Je sais qu'il est préférable d'utiliser TimeZone.secondsFromGMT:
, mais l'utilisation du paramètre d'abréviation facilite la lecture de ce qui se passe dans cette question.
Votre code n'a aucun sens. Un objet de date Cocoa est un instant dans le temps partout sur la planète. Au moment où j'écris ceci, il est environ 13h00 HAE, et vers midi heure centrale. Pourquoi le même objet 'Date' apparaîtrait-il en même temps dans différents fuseaux horaires? –
Vous devez utiliser un formateur de date défini sur le fuseau horaire souhaité pour exprimer cette date en heure locale. –
La seule différence entre vos deux jeux de sortie est le résultat de l'appel à 'hour' et votre fonction' hour' est basée sur votre locale actuelle et votre fuseau horaire actuel. Alors, bien sûr, ces valeurs changent lorsque vous changez le fuseau horaire de votre système. – rmaddy