ホームページ  >  記事  >  バックエンド開発  >  Go で間違ってフォーマットされた日付時刻をアンマーシャリングする方法は?

Go で間違ってフォーマットされた日付時刻をアンマーシャリングする方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-06 10:43:02191ブラウズ

How to Unmarshal Incorrectly Formatted Datetimes in Go?

不適切な形式の日時のアンマーシャリング

Go で JSON 日時をアンマーシャリングするときに、JSON で指定されたタイムゾーン オフセットの形式が正しくない場合に一般的な問題が発生します。 RFC3339 によると、予期される形式はコロン付きの 02:00 ですが、ソースによってはコロンなしの 0200 として出力される場合があります。

Custom Unmarshaling Solution

Toこの不一致を処理するには、両方の形式をサポートするカスタマイズされた時間フィールド タイプを定義できます。

<code class="go">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
}</code>

このソリューションでは、UnmarshalJSON メソッドを利用して、最初に JSON 文字列から引用符を削除します。次に、標準の RFC3339Nano 形式を使用して日時の解析を試みます。これが失敗した場合は、タイムゾーン オフセットからコロンを削除する変更された形式の解析に戻ります。

構造体の統合

この型を構造体に統合するには、次のように定義します。

<code class="go">type Test struct {
    Time MyTime `json:"time"`
}</code>

これにより、タイムゾーン オフセットがコロンで区切られているかどうかに関係なく、Time フィールドに正しい日付と時刻が入力された状態で、JSON を Test 構造体にアンマーシャリングできます。

時間形式に関する注意

時間形式文字列での 2006 年の使用は、Go の初期リリースからの歴史的な成果です。これには実際的な意味はなく、日時の正確性や形式には影響しません。

以上がGo で間違ってフォーマットされた日付時刻をアンマーシャリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。