首頁 > 後端開發 > Golang > 主體

在 Go 中將時間編組為 JSON 之前如何將時間轉換為 UTC?

WBOY
發布: 2024-02-09 19:00:11
轉載
483 人瀏覽過

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

在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中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!