在之前解析时区代码的尝试中,下面的代码始终生成结果“[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中文网其他相关文章!