為什麼Go 的time.Parse() 不解析時區標識符
在Go 中,time.Parse() 函數用於將日期和時間字串解析為時間值。但是,與其他日期和時間庫不同,time.Parse() 不會自動解析「EST」或「EDT」等時區識別碼。相反,它使用當前系統的時區來確定時間的偏移量。
問題
問題中提供的程式碼示範了此問題。它嘗試使用 time.Parse() 以兩種方式解析日期字串(“2018 08 01 12:00 EDT”):指定和不指定所需時區位置(America/New_York)。
使用時time.Parse() 沒有指定位置,時區標識符(“EDT”)無法識別,並且時間被解析為當前系統的時間時區(“0000”)。這會導致時間值不正確。
解決方案
要正確解析包含時區標識符的日期和時間字串,time.ParseInLocation() 函數必須被使用。此函數需要一個額外的 Location 參數,該參數指定解析時間所需的時區。
在提供的程式碼中, time.LoadLocation() 用於建立所需時區的 Location 物件(「America/New_York "),然後將其傳遞給 time.ParseInLocation()。這可確保正確解析時區標識符(“EDT”)並傳回正確的時間值。
替代解決方案
或者,可以使用日期和明確支持時區解析的時間庫,例如流行的“time.go”庫。該函式庫提供了像 ParseInZone() 這樣的函數,它允許直接解析時區標識符。
以上是為什麼 Go 的 `time.Parse()` 不處理時區識別碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!