解析時間字串時,Go 的time.Parse() 嘗試解釋任何包含的時區標識符基於當前位置。如果時區未知,Parse() 假設它位於具有給定縮寫和零偏移量的虛構位置。
考慮以下程式碼片段:
const format = "2006 01 02 15:04 MST" date := "2018 08 01 12:00 EDT" tn, _ := time.Parse(format, date)
在這裡,我們定義一個佈局格式化並解析包含時區識別碼「EDT」的日期字串。但是,當我們印製解析的時間時,我們得到:
2018-08-01 12:00:00 +0000 EDT
請注意,儘管EDT 是夏令時時區,與UTC 的偏移量為-0400,但時區顯示為“0000 EDT” 。
發生這種情況是因為 Parse() 依賴目前系統位置,該位置可能無法辨識「EDT」縮寫。相反,它將其解釋為未知區域並分配零偏移量。
為了避免此問題,我們可以:
const format = "2006 01 02 15:04 -0400" tn, _ := time.Parse(format, date)
aloc, _ := time.LoadLocation("America/New_York") tn, _ := time.ParseInLocation(format, date, aloc)
透過使用這些技術,我們確保正確解釋時區信息,並且解析的時間準確反映預期的偏移量。
以上是為什麼 Go 的 `time.Parse()` 會誤解時區識別碼以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!