Go の JSON アンマーシャリングには、タイムゾーン オフセットが含まれる ISO8601/RFC3339 に従ってフォーマットされた日時に関する問題があります。 02:00 ではなく 0200 をフォーマットしてください。
間違った 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 中国語 Web サイトの他の関連記事を参照してください。