Heim >Backend-Entwicklung >Golang >Warum interpretiert „time.Parse()' von Go Zeitzonenkennungen falsch und wie kann ich das beheben?
Beim Parsen einer Zeitzeichenfolge versucht time.Parse() von Go, jeden enthaltenen Zeitzonenbezeichner zu interpretieren basierend auf dem aktuellen Standort. Wenn die Zeitzone unbekannt ist, geht Parse() davon aus, dass sie sich an einem erfundenen Ort mit der angegebenen Abkürzung und einem Null-Offset befindet.
Bedenken Sie den folgenden Codeausschnitt:
const format = "2006 01 02 15:04 MST" date := "2018 08 01 12:00 EDT" tn, _ := time.Parse(format, date)
Hier definieren wir ein Layout Formatieren und analysieren Sie eine Datumszeichenfolge, die die Zeitzonenkennung „EDT“ enthält. Wenn wir jedoch die analysierte Zeit ausdrucken, erhalten wir Folgendes:
2018-08-01 12:00:00 +0000 EDT
Beachten Sie, dass die Zeitzone als „0000 EDT“ angezeigt wird, obwohl EDT eine Sommerzeitzone mit einem Offset von -0400 von UTC ist.
Dies geschieht, weil Parse() auf den aktuellen Systemstandort angewiesen ist, der die Abkürzung „EDT“ möglicherweise nicht erkennt. Stattdessen wird es als unbekannte Zone interpretiert und ein Null-Offset zugewiesen.
Um dieses Problem zu vermeiden, können wir entweder:
const format = "2006 01 02 15:04 -0400" tn, _ := time.Parse(format, date)
aloc, _ := time.LoadLocation("America/New_York") tn, _ := time.ParseInLocation(format, date, aloc)
Durch die Verwendung dieser Techniken stellen wir sicher, dass die Zeitzoneninformationen korrekt interpretiert werden und die analysierte Zeit den beabsichtigten Versatz genau widerspiegelt.
Das obige ist der detaillierte Inhalt vonWarum interpretiert „time.Parse()' von Go Zeitzonenkennungen falsch und wie kann ich das beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!