首頁 >後端開發 >Golang >為什麼 Go 的 `time.Parse()` 會誤解時區識別碼以及如何修復它?

為什麼 Go 的 `time.Parse()` 會誤解時區識別碼以及如何修復它?

Linda Hamilton
Linda Hamilton原創
2024-11-26 12:10:14295瀏覽

Why Does Go's `time.Parse()` Misinterpret Timezone Identifiers and How Can I Fix It?

為什麼time.Parse() 不解析時區標識符

解析時間字串時,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」縮寫。相反,它將其解釋為未知區域並分配零偏移量。

為了避免此問題,我們可以:

  1. 使用明確指定時區偏移的時間佈局:
const format = "2006 01 02 15:04 -0400"
tn, _ := time.Parse(format, date)
  1. 使用ParseInLocation()指定所需的timezone:
aloc, _ := time.LoadLocation("America/New_York")
tn, _ := time.ParseInLocation(format, date, aloc)

透過使用這些技術,我們確保正確解釋時區信息,並且解析的時間準確反映預期的偏移量。

以上是為什麼 Go 的 `time.Parse()` 會誤解時區識別碼以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn