Heim >Backend-Entwicklung >Golang >Warum interpretiert „time.Parse()' von Go Zeitzonenkennungen falsch und wie kann ich das beheben?

Warum interpretiert „time.Parse()' von Go Zeitzonenkennungen falsch und wie kann ich das beheben?

Linda Hamilton
Linda HamiltonOriginal
2024-11-26 12:10:14207Durchsuche

Why Does Go's `time.Parse()` Misinterpret Timezone Identifiers and How Can I Fix It?

Warum time.Parse() den Zeitzonenbezeichner nicht analysiert

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:

  1. Ein Zeitlayout verwenden, das den Zeitzonen-Offset explizit angibt:
const format = "2006 01 02 15:04 -0400"
tn, _ := time.Parse(format, date)
  1. Verwenden Sie ParseInLocation(), um das Gewünschte anzugeben Zeitzone:
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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn