Go 的JSON 解組有依據ISO8601/RFC3339 格式化的日期時間問題,這些日期時間在格式0200 而不是02:00。
JSON 格式不正確:
2016-08-08T21:35:14.052975+0200
預期正確格式:
2016-08-08T21:35:14.052975+02:00
可能的原因:
JSON 是使用C 的strftime 函數產生的,其格式字串不包含時區偏移中的冒號。
要解決此問題並啟用兩種格式的正確解組,可以定義自訂時間欄位類型:
<code class="go">type MyTime struct { time.Time } func (self *MyTime) UnmarshalJSON(b []byte) (err error) { s := string(b) // Remove double quotes from JSON value s = s[1:len(s)-1] 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 }</code>
在此自訂類型中,UnmarshalJSON 方法嘗試根據RFC3339Nano(時區偏移中帶有冒號)和不帶冒號的RFC3339Nano 修改版本來解析字串。
要使用自訂時間欄位類型:
<code class="go">type Test struct { Time MyTime `json:"time"` }</code>
然後可以使用不正確或正確的時區偏移量從 JSON 格式解組該結構。
以上是如何在 Go 中解組具有不正確時區偏移的 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!