首頁 > 後端開發 > Golang > 為什麼我的 Go 程式碼總是回傳 UTC 時間,儘管使用 `time.Parse` 指定了不同的時區?

為什麼我的 Go 程式碼總是回傳 UTC 時間,儘管使用 `time.Parse` 指定了不同的時區?

Barbara Streisand
發布: 2024-11-29 11:28:12
原創
874 人瀏覽過

Why Does My Go Code Always Return UTC Time Despite Specifying Different Time Zones Using `time.Parse`?

解析時區程式碼:深入研究

在先前解析時區程式碼的嘗試中,下面的程式碼總是會產生結果「[date] 05:00:00 0000 UTC ”,無論parseAndPrint 所選的時區為何

// time testing with arbitrary format
package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    parseAndPrint(now, "BRT")
    parseAndPrint(now, "EDT")
    parseAndPrint(now, "UTC")
}

func parseAndPrint(now time.Time, timezone string) {
    test, err := time.Parse("15:04:05 MST", fmt.Sprintf("05:00:00 %s", timezone))
    if err != nil {
        fmt.Println(err)
        return
    }

    test = time.Date(
        now.Year(),
        now.Month(),
        now.Day(),
        test.Hour(),
        test.Minute(),
        test.Second(),
        test.Nanosecond(),
        test.Location(),
    )

    fmt.Println(test.UTC())
}
登入後複製

此問題源自於time.Parse 解釋目前位置的時間,這可能與預期的時區不符。

解決問題:了解時區上下文

要準確解析時區程式碼,正確的方法是使用 time.Location。這是一個改進的實作:

func parseAndPrint(now time.Time, timezone string) {
    location, err := time.LoadLocation(timezone)
    if err != nil {
        fmt.Println(err)
        return
    }

    test, err := time.ParseInLocation("15:04:05 MST", "05:00:00", location)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(test.UTC())
}
登入後複製

在此更新的程式碼中:

  • time.LoadLocation(timezone) 載入指定的時區位置。
  • time.ParseInLocation( “15:04:05 MST”、“05:00:00”、位置)解析時間指定時區位置的“05:00:00”。這會產生預期時區的正確時間。

以上是為什麼我的 Go 程式碼總是回傳 UTC 時間,儘管使用 `time.Parse` 指定了不同的時區?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板