解組格式錯誤的日期時間
在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