在先前解析時區程式碼的嘗試中,下面的程式碼總是會產生結果「[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()) }
在此更新的程式碼中:
以上是為什麼我的 Go 程式碼總是回傳 UTC 時間,儘管使用 `time.Parse` 指定了不同的時區?的詳細內容。更多資訊請關注PHP中文網其他相關文章!