ホームページ  >  記事  >  バックエンド開発  >  Go で一貫性のない日時形式をアンマーシャリングするにはどうすればよいですか?

Go で一貫性のない日時形式をアンマーシャリングするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-05 05:31:01672ブラウズ

How to Unmarshal Inconsistent Datetime Formats in Go?

一貫性のない日時形式のアンマーシャル

JSON データを扱う場合、タイムゾーン オフセット形式が異なるため、日時形式をアンマーシャルすると不整合が生じる可能性があります。 Go の標準解析メカニズムではタイムゾーン オフセットが 02:00 形式であることが想定されていますが、一部のデータには 0200 などの誤った形式が含まれている可能性があります。

これに対処するために、Go は正しいタイムゾーン形式と間違ったタイムゾーン形式の両方を処理するカスタム アンマーシャリング メソッドを提供します。改訂されたアプローチは次のとおりです。

type MyTime struct {
    time.Time
}

func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
    s := string(b)

    // Remove quotation marks
    s = s[1:len(s)-1]

    // Attempt to parse using RFC3339Nano format
    t, err := time.Parse(time.RFC3339Nano, s)
    if err != nil {
        // If parsing fails, try custom format without ':'
        t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
    }
    self.Time = t
    return
}

type Test struct {
    Time MyTime `json:"time"`
}

このカスタム アンマーシャリング メソッド (UnmarshalJSON) では、

  1. 標準 RFC3339Nano 形式を使用して解析します。
  2. 解析が失敗した場合タイムゾーン オフセットの形式が正しくないため、タイムゾーン オフセットに「:」を挿入する変更された形式 (「2006-01-02T15:04:05.999999999Z0700」) を使用して解析します。

このアプローチにより、正しい形式の日時文字列と正しくない形式の日時文字列の両方が正しく解析されること。

以上がGo で一貫性のない日時形式をアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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