Maison > développement back-end > Golang > Comment convertir l'heure en UTC avant de la convertir en JSON dans Go ?

Comment convertir l'heure en UTC avant de la convertir en JSON dans Go ?

WBOY
Libérer: 2024-02-09 19:00:11
avant
531 Les gens l'ont consulté

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

En langage Go, avant de convertir l'heure en UTC, nous pouvons utiliser les fonctions et méthodes fournies dans le package time pour la traiter. Tout d’abord, nous pouvons utiliser la fonction time.Now() pour obtenir l’heure locale actuelle. Ensuite, utilisez la fonction time.LoadLocation("UTC") pour charger le fuseau horaire UTC. Ensuite, utilisez la méthode time.In() pour convertir l’heure locale en heure UTC. Enfin, utilisez la méthode time.Format() pour formater l'heure UTC dans le format de chaîne dont nous avons besoin. De cette façon, nous pouvons convertir l’heure en UTC et effectuer des traitements et opérations ultérieurs.

Contenu de la question

J'essaie de définir une représentation au format time 结构,它实现 marshaler 接口,这样,当它被编组为 json 时,它以 yyyy-mm-ddthh:mm:ssz où l'heure est convertie en utc et arrondie à la seconde la plus proche. J'ai essayé les procédures suivantes :

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))
}
Copier après la connexion

Mais quand je l'exécute, il s'imprime

> go run main.go
"2022-12-07t16:32:51.494597-08:00"
Copier après la connexion

En revanche, si je passe time.now().utc().round(time.second) comme entrée à marshaler (c'est-à-dire en utilisant la ligne commentée dans l'extrait ci-dessus), j'obtiens le résultat souhaité :

> go run main.go
"2022-12-08T00:41:10Z"
Copier après la connexion

Ma question est la suivante : pourquoi ne puis-je pas effectuer la conversion en utc et arrondir à la seconde la plus proche dans la méthode marshaljson elle-même ?

Solution

Que veux-tu faire ?

J'ai essayé d'exécuter votre fonction marshaljson et cela a fonctionné comme prévu

Voici ce que j'ai essayé de faire :

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))
}
Copier après la connexion

J'ai obtenu le résultat suivant :

"2022-12-08T04:41:59Z"
2022-12-08T04:41:59Z
Copier après la connexion

La première ligne est votre sortie précédente et la deuxième ligne est la sortie de la fonction marshaljson.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal