Heim >Backend-Entwicklung >Golang >Warum gibt meine Go-Funktion „time.Parse' einen unerwarteten Zeitwert zurück?

Warum gibt meine Go-Funktion „time.Parse' einen unerwarteten Zeitwert zurück?

Barbara Streisand
Barbara StreisandOriginal
2024-11-23 10:00:35959Durchsuche

Why is my Go `time.Parse` function returning an unexpected time value?

Verstehen des time.Parse-Verhaltens in Go

Beim Versuch, Zeichenfolgen in time.Time-Werte in Go mithilfe der time.Parse-Methode umzuwandeln, Das Festlegen der richtigen Formatzeichenfolge ist entscheidend, um das erwartete Ergebnis zu erzielen.

Beachten Sie den folgenden Code Snippet:

package main

import (
    "fmt"
    "time"
)

func main() {
    const longForm = "2013-05-13T18:41:34.848Z"
    //even this is not working
    //const longForm = "2013-05-13 18:41:34.848 -0700 PDT"
    t, _ := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700 PDT")
    fmt.Println(t)
}

Der Code versucht, eine Zeichenfolge im Format „2013-05-13 18:41:34.848 -0700 PDT“ mithilfe der longForm-Formatzeichenfolge zu analysieren. Die Ausgabe ist jedoch unerwartet: „0001-01-01 00:00:00 0000 UTC“.

Um dieses Verhalten zu verstehen, ist es wichtig zu beachten, dass die Standardreferenzzeit für die time.Parse-Methode „ Montag, 2. Januar 15:04:05 MST 2006“, was die Unix-Zeit 1136239445 darstellt. Dies bedeutet, dass die Formatzeichenfolge darstellen muss die Referenzzeit entsprechend.

Im angegebenen Code stellt die LongForm-Formatzeichenfolge die Referenzzeit fälschlicherweise als „2006-01-02 15:04:05 -0700“ dar. Diese Nichtübereinstimmung im Referenzzeitformat führt zu einer unerwarteten Ausgabe.

Um dieses Problem zu beheben, sollte die LongForm-Formatzeichenfolge so geändert werden, dass sie mit der Referenzzeit übereinstimmt:

package main

import (
        "fmt"
        "log"
        "time"
)

func main() {
        const longForm = "2006-01-02 15:04:05 -0700"
        t, err := time.Parse(longForm, "2013-05-13 18:41:34.848 -0700")
        if err != nil {
                log.Fatal(err)
        }
        fmt.Println(t)
}

Mit der richtigen LongForm Formatzeichenfolge konvertiert die Methode time.Parse die Zeichenfolge jetzt genau in einen time.Time-Wert: „2013-05-13 01:41:34.848 0000“. UTC".

Das obige ist der detaillierte Inhalt vonWarum gibt meine Go-Funktion „time.Parse' einen unerwarteten Zeitwert zurück?. 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