不正な形式の日付時刻をアンマーシャリングする
Go で JSON 日付時刻をアンマーシャリングするときに、JSON で指定されたタイムゾーン オフセットの形式が正しくない場合に一般的な問題が発生します。 RFC3339 によると、予期される形式はコロン付きの 02:00 ですが、ソースによってはコロンなしの 0200 として出力される場合があります。
Custom Unmarshaling Solution
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"`
}
これにより、タイムゾーン オフセットがコロンで区切られているかどうかに関係なく、Time フィールドに正しい日付と時刻が入力された状態で、JSON を Test 構造体にアンマーシャリングできるようになります。
時刻形式に関する注意
時刻形式文字列での 2006 年の使用は、初期リリースからの歴史的成果です。 行く。これには実際的な意味はなく、日時の正確さや形式には影響しません。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3