在Go語言中,將時間轉換為UTC之前,我們可以使用time套件中提供的函數和方法來處理。首先,我們可以使用time.Now()函數來取得目前的本地時間。然後,使用time.LoadLocation("UTC")函數載入UTC時區。接下來,使用time.In()方法將本地時間轉換為UTC時間。最後,使用time.Format()方法將UTC時間格式化為我們需要的字串格式。透過這種方式,我們可以將時間轉換為UTC,並進行後續的處理和操作。
我試圖定義一個time
結構,它實作marshaler
接口,這樣,當它被編組為json 時,它以yyyy-mm-ddthh:mm:ssz
格式表示,即時間被轉換轉換為utc 並四捨五入到最接近的秒。我嘗試過以下程式:
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)) }
但是,當我運行它時,它會列印
> go run main.go "2022-12-07t16:32:51.494597-08:00"
相較之下,如果我傳入time.now().utc().round(time.second)
作為要封送的輸入(即,使用上面程式碼片段中的註釋行),我得到所需的輸出:
> go run main.go "2022-12-08T00:41:10Z"
我的問題是:為什麼我不能在 marshaljson
方法本身中執行到 utc 的轉換並四捨五入到最接近的秒?
你想做什麼?
我嘗試運行您的 marshaljson
函數,它按預期工作
這是我嘗試做的:
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)) }
我得到了以下輸出:
"2022-12-08T04:41:59Z" 2022-12-08T04:41:59Z
第一行是您先前的輸出,第二行是 marshaljson
函數的輸出。
以上是在 Go 中將時間編組為 JSON 之前如何將時間轉換為 UTC?的詳細內容。更多資訊請關注PHP中文網其他相關文章!