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.
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)) }
Mais quand je l'exécute, il s'imprime
> go run main.go "2022-12-07t16:32:51.494597-08:00"
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"
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 ?
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)) }
J'ai obtenu le résultat suivant :
"2022-12-08T04:41:59Z" 2022-12-08T04:41:59Z
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!