Aperçu du problème
Lors de la tentative de conversion de l'heure UTC en heure locale, certains utilisateurs rencontrent des résultats incorrects. Plus précisément, le problème survient lors de l'ajout d'une durée, calculée à partir d'un décalage UTC fourni, à l'heure UTC actuelle. Cette valeur renvoyée s'écarte de l'heure locale prévue.
Approche initiale
L'extrait de code initialise une carte contenant les décalages UTC pour différents pays. Il tente de convertir le décalage de « Hongrie » en une durée, en l'ajoutant à l'heure UTC, et affiche le résultat sous la forme « heure locale ».
package main import "fmt" import "time" func main() { m := make(map[string]string) m["Hungary"] = "+01.00h" offSet, err := time.ParseDuration(m["Hungary"]) if err != nil { panic(err) } t := time.Now().UTC().Add(offSet) nice := t.Format("15:04") fmt.Println(nice) }
Résultats incorrects
Lors de son exécution, le code produit des heures locales incorrectes, notamment pour les pays avec un décalage par rapport à UTC. Par exemple, avec le décalage d'une heure en Hongrie, le résultat ne reflète pas l'heure locale réelle.
Cause fondamentale
Les résultats incorrects proviennent de l'hypothèse selon laquelle le L’heure UTC ajustée est équivalente à l’heure locale. Cependant, cette hypothèse ne tient pas compte du concept de fuseaux horaires.
Considérations sur les fuseaux horaires
Les fuseaux horaires sont des régions géographiques qui observent une heure standard à des fins juridiques, commerciales et sociales. . Différents fuseaux horaires ont leurs propres décalages par rapport à UTC, représentant la différence de temps par rapport au méridien d'origine.
Approche correcte
Pour convertir avec précision l'heure UTC en une heure locale spécifique, il est essentiel de prendre en compte le fuseau horaire associé à cet emplacement. La fonction time.LoadLocation permet d'obtenir un objet fuseau horaire en fonction de son identifiant de chaîne.
var countryTz = map[string]string{ "Hungary": "Europe/Budapest", "Egypt": "Africa/Cairo", } func timeIn(name string) time.Time { loc, err := time.LoadLocation(countryTz[name]) if err != nil { panic(err) } return time.Now().In(loc) } func main() { utc := time.Now().UTC().Format("15:04") hun := timeIn("Hungary").Format("15:04") eg := timeIn("Egypt").Format("15:04") fmt.Println(utc, hun, eg) }
Cette solution garantit que l'heure convertie reflète l'heure locale du pays spécifié, en tenant compte de l'heure pertinente zone.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!