How to convert time to UTC before marshalling it to JSON in Go?
In the Go language, before converting time to UTC, we can use the functions and methods provided in the time package to process it. First, we can use the time.Now() function to get the current local time. Then, use the time.LoadLocation("UTC") function to load the UTC time zone. Next, use the time.In() method to convert local time to UTC time. Finally, use the time.Format() method to format the UTC time into the string format we need. In this way, we can convert the time to UTC and perform subsequent processing and operations.
Question content
I am trying to define a time
structure that implements the marshaler
interface so that when it is marshaled to json, it ends with yyyy-mm-ddthh:mm:ssz
Format representation, that is, the time is converted to UTC and rounded to the nearest second. I have tried the following procedures:
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)) }
However, when I run it, it prints
> go run main.go "2022-12-07t16:32:51.494597-08:00"
In contrast, if I pass in time.now().utc().round(time.second)
as the input to be marshaled (i.e., using the comments in the snippet above line), I get the desired output:
> go run main.go "2022-12-08T00:41:10Z"
My question is: Why can't I perform the conversion to utc and round to the nearest second in the marshaljson
method itself?
Solution
What do you want to do?
I tried running your marshaljson
function and it worked as expected
This is what I tried to do:
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)) }
I got the following output:
"2022-12-08T04:41:59Z" 2022-12-08T04:41:59Z
The first line is your previous output, the second line is the output of the marshaljson
function.
The above is the detailed content of How to convert time to UTC before marshalling it to JSON in Go?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

The library used for floating-point number operation in Go language introduces how to ensure the accuracy is...

Queue threading problem in Go crawler Colly explores the problem of using the Colly crawler library in Go language, developers often encounter problems with threads and request queues. �...

The difference between string printing in Go language: The difference in the effect of using Println and string() functions is in Go...

The problem of using RedisStream to implement message queues in Go language is using Go language and Redis...

Two ways to define structures in Go language: the difference between var and type keywords. When defining structures, Go language often sees two different ways of writing: First...

Which libraries in Go are developed by large companies or well-known open source projects? When programming in Go, developers often encounter some common needs, ...

What should I do if the custom structure labels in GoLand are not displayed? When using GoLand for Go language development, many developers will encounter custom structure tags...

When using sql.Open, why doesn’t the DSN report an error? In Go language, sql.Open...
