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.
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?
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!