Heim >Backend-Entwicklung >Golang >Warum kann „time.Parse' von Go Zeitzonen nicht genau analysieren, und wie kann das behoben werden?
Grundlegendes zum Parsen von Zeitzonen in Go
Das Parsen von Zeitzonencodes in Go umfasst die Konvertierung einer Zeichenfolgendarstellung einer Zeitzone in eine entsprechende *Zeit .Location-Objekt. In bestimmten Szenarien spiegelt das analysierte Ergebnis jedoch möglicherweise nicht genau die gewünschte Zeitzone wider. Dieser Artikel untersucht ein häufiges Problem beim Parsen von Zeitzonen und bietet Lösungen.
Problemformulierung
Beachten Sie den folgenden Code:
package main import ( "fmt" "time" ) func main() { now := time.Now() parseAndPrint(now, "BRT") parseAndPrint(now, "EDT") parseAndPrint(now, "UTC") } func parseAndPrint(now time.Time, timezone string) { test, err := time.Parse("15:04:05 MST", fmt.Sprintf("05:00:00 %s", timezone)) if err != nil { fmt.Println(err) return } test = time.Date( now.Year(), now.Month(), now.Day(), test.Hour(), test.Minute(), test.Second(), test.Nanosecond(), test.Location(), ) fmt.Println(test.UTC()) }
Beim Ausführen Mit diesem Code zeigt die Ausgabe unabhängig von der angegebenen Zeitzone immer „[Datum] 05:00:00 0000 UTC“ an. Dies liegt daran, dass der Code die Zeit am aktuellen Standort analysiert und dann die Zeitzone explizit auf UTC setzt.
Lösung: Verwendung von time.Location
Zur korrekten Handhabung Beim Parsen der Zeitzone müssen wir den Typ *time.Location verwenden. Wir können mit time.LoadLocation einen Ort aus der lokalen Zeitzonendatenbank laden und dann die Zeit mit time.ParseInLocation analysieren. Hier ist der geänderte Code:
package main import ( "fmt" "time" ) func main() { now := time.Now() parseAndPrint(now, "BRT") parseAndPrint(now, "EDT") parseAndPrint(now, "UTC") } func parseAndPrint(now time.Time, timezone string) { location, err := time.LoadLocation(timezone) if err != nil { fmt.Println(err) return } test, err := time.ParseInLocation("15:04:05 MST", "05:00:00", location) if err != nil { fmt.Println(err) return } fmt.Println(test) }
Jetzt analysiert der Code die Zeitzonen-spezifische Zeit korrekt und gibt das Ergebnis im gewünschten Zeitzonenformat aus.
Das obige ist der detaillierte Inhalt vonWarum kann „time.Parse' von Go Zeitzonen nicht genau analysieren, und wie kann das behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!