Heim > Backend-Entwicklung > Golang > Warum gibt mein Go-Code immer die UTC-Zeit zurück, obwohl ich mit „time.Parse' unterschiedliche Zeitzonen angegeben habe?

Warum gibt mein Go-Code immer die UTC-Zeit zurück, obwohl ich mit „time.Parse' unterschiedliche Zeitzonen angegeben habe?

Barbara Streisand
Freigeben: 2024-11-29 11:28:12
Original
938 Leute haben es durchsucht

Why Does My Go Code Always Return UTC Time Despite Specifying Different Time Zones Using `time.Parse`?

Zeitzonencodes analysieren: Ein tieferer Einblick

Bei einem früheren Versuch, Zeitzonencodes zu analysieren, lieferte der folgende Code durchweg das Ergebnis „[Datum] 05:00:00 0000 UTC“ unabhängig von der für parseAndPrint gewählten Zeitzone Funktion.

// time testing with arbitrary format
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())
}
Nach dem Login kopieren

Dieses Problem ergibt sich aus der Tatsache, dass time.Parse die Zeit am aktuellen Standort interpretiert, die möglicherweise nicht mit der beabsichtigten Zeitzone übereinstimmt.

Lösung des Problems: Verständnis des Zeitzonenkontexts

Um Zeitzonencodes genau zu analysieren, besteht der richtige Ansatz darin, time.Location zu verwenden. Hier ist eine verbesserte Implementierung:

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.UTC())
}
Nach dem Login kopieren

In diesem aktualisierten Code:

  • time.LoadLocation(timezone) lädt den angegebenen Zeitzonenstandort.
  • time.ParseInLocation( „15:04:05 MST“, „05:00:00“, Standort) analysiert die Zeit „05:00:00“ am angegebenen Zeitzonenort. Dies ergibt die korrekte Zeit in der vorgesehenen Zeitzone.

Das obige ist der detaillierte Inhalt vonWarum gibt mein Go-Code immer die UTC-Zeit zurück, obwohl ich mit „time.Parse' unterschiedliche Zeitzonen angegeben habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage