Contexte
J'ai besoin de convertir la chaîne de temps avec le format suivant: « HH: mm » UTC à fuseau horaire local. Par exemple, si l'heure UTC est 09:00, l'heure locale (Stockholm/Europe) devrait être deux heures d'avance.Convertir UTC à fuseau horaire local donne un résultat erroné
Problème
Quand je convertir 09:00 (UTC) à l'heure de Stockholm/Europe je reçois 10:00. Il devrait être 11h00.
func UTCToLocal(date:String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let dt = dateFormatter.date(from: date)
dateFormatter.timeZone = TimeZone.current //Stockholm/Europe
return dateFormatter.string(from: dt!)
}
print(UTCToLocal(date: "09:00")) //prints 10:00
Pourquoi le fuseau horaire est-il différent de ce qu'il est censé être?
Imprimer 'dt'. Mettez à jour votre question avec sa sortie. Très probablement c'est une vieille date qui cause votre problème. – rmaddy
Sans rapport, mais pourquoi définir le 'dateFormat' deux fois au même format? Et pourquoi utiliser l'interpolation de chaîne sur 'date'? Faites juste 'let dt = dateFormatter.date (from: date)' – rmaddy