問題概述
當嘗試將UTC 時間轉換為本地時間時,某些使用者遇到不正確的結果。具體來說,當將根據提供的 UTC 偏移計算出的持續時間添加到當前 UTC 時間時,就會出現問題。此回傳值偏離預期的本地時間。
初始方法
程式碼片段初始化包含各國的 UTC 偏移量的地圖。它嘗試將“匈牙利”的偏移量轉換為持續時間,將其添加到 UTC 時間,並將結果顯示為“本地時間”。
package main import "fmt" import "time" func main() { m := make(map[string]string) m["Hungary"] = "+01.00h" offSet, err := time.ParseDuration(m["Hungary"]) if err != nil { panic(err) } t := time.Now().UTC().Add(offSet) nice := t.Format("15:04") fmt.Println(nice) }
不正確的結果
執行後,程式碼會產生不正確的本地時間,特別是對於與 UTC 有偏移的國家。例如,匈牙利的時差為一小時,結果並不反映實際的當地時間。
根本原因
錯誤的結果源自於以下假設:調整後的UTC時間與當地時間相同。然而,這種假設忽略了時區的概念。
時區注意事項
時區是出於法律、商業和社會目的而遵守標準時間的地理區域。不同的時區有自己相對於 UTC 的偏移量,代表與本初子午線的時差。
正確方法
要將 UTC 時間準確轉換為特定的本地時間,必須考慮與該位置相關的時區。 time.LoadLocation 函數可讓您根據字串識別碼取得時區物件。
var countryTz = map[string]string{ "Hungary": "Europe/Budapest", "Egypt": "Africa/Cairo", } func timeIn(name string) time.Time { loc, err := time.LoadLocation(countryTz[name]) if err != nil { panic(err) } return time.Now().In(loc) } func main() { utc := time.Now().UTC().Format("15:04") hun := timeIn("Hungary").Format("15:04") eg := timeIn("Egypt").Format("15:04") fmt.Println(utc, hun, eg) }
此解決方案可確保轉換後的時間反映指定國家的當地時間,同時考慮相關時間區域。
以上是為什麼在 Go 中向 UTC 時間添加 UTC 偏移量不能準確產生本地時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!