」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Go 中解組格式不正確的日期時間?

如何在 Go 中解組格式不正確的日期時間?

發佈於2024-11-09
瀏覽:821

How to Unmarshal Incorrectly Formatted Datetimes in Go?

解組格式錯誤的日期時間

在Go 中解組JSON 日期時間時,當JSON 中提供的時區偏移格式不正確時,會出現一個常見問題。根據 RFC3339,預期格式是帶冒號的 02:00,但某些來源可能會將其輸出為不含冒號的 0200。

自訂解組解決方案

To為了處理這種差異,可以定義支援兩種格式的自訂時間欄位類型:

type MyTime struct {
    time.Time
}

func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
    s := string(b)
    s = s[1:len(s)-1] // Remove the quotes

    t, err := time.Parse(time.RFC3339Nano, s)
    if err != nil {
        t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
    }
    self.Time = t
    return
}

此解決方案利用 UnmarshalJSON 方法首先從 JSON 字串中刪除引號。然後,它嘗試使用標準 RFC3339Nano 格式解析日期時間。如果失敗,它會回退到解析修改後的格式,從時區偏移中刪除冒號。

結構整合

要將此類型整合到結構中,請定義它為:

type Test struct {
    Time MyTime `json:"time"`
}

這允許將 JSON 解組到 Test 結構中,並用正確的日期和時間填充 Time 字段,無論時區偏移量是否以冒號分隔。

關於時間格式的注意事項

時間格式字串中使用 2006 年是 Go 最初版本的歷史產物。它沒有實際意義,不會影響日期時間的正確性或格式。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3