Wie konvertiere ich die Zeit in UTC, bevor ich sie in Go in JSON umwandele?

WBOY
Freigeben: 2024-02-09 19:00:11
nach vorne
483 Leute haben es durchsucht

在 Go 中将时间编组为 JSON 之前如何将时间转换为 UTC?

In der Go-Sprache können wir vor der Konvertierung der Zeit in UTC die im Zeitpaket bereitgestellten Funktionen und Methoden verwenden, um sie zu verarbeiten. Zunächst können wir die Funktion time.Now() verwenden, um die aktuelle Ortszeit abzurufen. Verwenden Sie dann die Funktion time.LoadLocation("UTC"), um die UTC-Zeitzone zu laden. Als nächstes verwenden Sie die Methode time.In(), um die Ortszeit in UTC-Zeit umzuwandeln. Verwenden Sie abschließend die Methode time.Format(), um die UTC-Zeit in das von uns benötigte Zeichenfolgenformat zu formatieren. Auf diese Weise können wir die Zeit in UTC umrechnen und nachfolgende Verarbeitungen und Operationen durchführen.

Frageninhalt

Ich versuche, eine time 结构,它实现 marshaler 接口,这样,当它被编组为 json 时,它以 yyyy-mm-ddthh:mm:ssz-Formatdarstellung zu definieren, bei der die Zeit in UTC konvertiert und auf die nächste Sekunde gerundet wird. Ich habe folgende Verfahren ausprobiert:

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "time"
)

type time struct {
    time.time
}

func (t *time) marshaljson() ([]byte, error) {
    return []byte(t.time.utc().round(time.second).format(time.rfc3339)), nil
}

func main() {
    tm := time.now()
    // tm := time.now().utc().round(time.second)

    tmjson, err := json.marshal(tm)
    if err != nil {
        log.fatalf("marshal time: %v", err)
    }

    fmt.println(string(tmjson))
}
Nach dem Login kopieren

Aber wenn ich es ausführe, wird es gedruckt

> go run main.go
"2022-12-07t16:32:51.494597-08:00"
Nach dem Login kopieren

Wenn ich dagegen time.now().utc().round(time.second) als zu marshallende Eingabe übergebe (d. h. unter Verwendung der kommentierten Zeile im Snippet oben), erhalte ich die gewünschte Ausgabe:

> go run main.go
"2022-12-08T00:41:10Z"
Nach dem Login kopieren

Meine Frage ist: Warum kann ich die Konvertierung in UTC und das Runden auf die nächste Sekunde in der marshaljson-Methode selbst nicht durchführen?

Lösung

Was möchten Sie tun?

Ich habe versucht, Ihre marshaljson Funktion auszuführen und sie hat wie erwartet funktioniert

Das habe ich versucht:

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "time"
)

type time struct {
    time.time
}

func (t *time) marshaljson() ([]byte, error) {
    return []byte(t.time.utc().round(time.second).format(time.rfc3339)), nil
}

func main() {
    // tm := time.now().utc()
    tm := time.now().utc().round(time.second)

    tmjson, err := json.marshal(tm)
    if err != nil {
        log.fatalf("marshal time: %v", err)
    }

    fmt.println(string(tmjson))

    marshal_time := time{time.now().utc()}
    byt_arr, _ := marshal_time.marshaljson()
    fmt.println(string(byt_arr))
}
Nach dem Login kopieren

Ich habe folgende Ausgabe erhalten:

"2022-12-08T04:41:59Z"
2022-12-08T04:41:59Z
Nach dem Login kopieren

Die erste Zeile ist Ihre vorherige Ausgabe und die zweite Zeile ist die Ausgabe der Funktion marshaljson.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich die Zeit in UTC, bevor ich sie in Go in JSON umwandele?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!