Problemübersicht
Beim Versuch, UTC-Zeit in Ortszeit umzuwandeln, Bestimmte Benutzer erhalten falsche Ergebnisse. Das Problem tritt insbesondere auf, wenn eine Dauer, die aus einem angegebenen UTC-Offset berechnet wird, zur aktuellen UTC-Zeit addiert wird. Dieser zurückgegebene Wert weicht von der erwarteten Ortszeit ab.
Erster Ansatz
Das Code-Snippet initialisiert eine Karte mit UTC-Offsets für verschiedene Länder. Es wird versucht, den Offset für „Ungarn“ in eine Dauer umzuwandeln, ihn zur UTC-Zeit zu addieren und das Ergebnis als „Ortszeit“ anzuzeigen.
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) }
Falsche Ergebnisse
Bei der Ausführung erzeugt der Code falsche Ortszeiten, insbesondere für Länder mit einem Offset zur UTC. Beispielsweise spiegelt das Ergebnis bei Ungarns einstündigem Zeitversatz nicht die tatsächliche Ortszeit wider.
Ursache
Die falschen Ergebnisse beruhen auf der Annahme, dass die Die angepasste UTC-Zeit entspricht der Ortszeit. Diese Annahme lässt jedoch das Konzept der Zeitzonen außer Acht.
Überlegungen zu Zeitzonen
Zeitzonen sind geografische Regionen, in denen aus rechtlichen, kommerziellen und sozialen Gründen eine Standardzeit gilt . Verschiedene Zeitzonen haben ihren eigenen Offset von UTC, der den Zeitunterschied zum Nullmeridian darstellt.
Richtiger Ansatz
Um die UTC-Zeit genau in eine bestimmte Ortszeit umzurechnen, Es ist wichtig, die mit diesem Standort verbundene Zeitzone zu berücksichtigen. Mit der Funktion time.LoadLocation können Sie ein Zeitzonenobjekt basierend auf seiner Zeichenfolgenkennung abrufen.
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) }
Diese Lösung stellt sicher, dass die konvertierte Zeit die Ortszeit für das angegebene Land unter Berücksichtigung der relevanten Zeit widerspiegelt Zone.
Das obige ist der detaillierte Inhalt vonWarum erzeugt das Hinzufügen eines UTC-Offsets zur UTC-Zeit nicht genau die Ortszeit in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!