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
Freigeben: 2024-11-23 10:00:35
Original
977 Leute haben es durchsucht

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

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

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!

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