Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiere ich die Zeit in UTC, bevor ich sie in Go in JSON umwandele?

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

WBOY
WBOYnach vorne
2024-02-09 19:00:11483Durchsuche

在 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))
}

Aber wenn ich es ausführe, wird es gedruckt

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

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"

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))
}

Ich habe folgende Ausgabe erhalten:

"2022-12-08T04:41:59Z"
2022-12-08T04:41:59Z

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen