ホームページ > バックエンド開発 > Golang > Golang で XML を「time.Time」フィールドにアンマーシャリングするときにカスタム日付形式を指定する方法

Golang で XML を「time.Time」フィールドにアンマーシャリングするときにカスタム日付形式を指定する方法

Barbara Streisand
リリース: 2024-11-09 08:47:02
オリジナル
725 人が閲覧しました

How to Specify a Custom Date Format When Unmarshaling XML into a `time.Time` Field in Golang?

Golang XML の日付形式の不一致を克服する time.Time によるアンマーシャル

REST API を介した XML データの取得 spesso は、アンマーシャリングを試みるときに課題を提示しますデータを Golang 構造体に格納します。 API によって返される日付形式がデフォルトの time.Time 解析形式と一致しない場合に、頻繁に問題が発生します。その結果、アンマーシャリングが失敗します。

そのような場合、文字列を使用して表現することに頼る傾向があります。 datetime フィールドですが、適切に定義された型を維持することが望ましいです。この問題に対処するために、質問では、time.Time フィールドにアンマーシャリングするときにカスタム日付形式を指定する方法があるかどうかを検討します。 >標準ライブラリの XML エンコーディング パッケージは、xml.Unmarshaler インターフェイスを介したソリューションを提供します。ただし、time.Time はこのインターフェイスを実装していないため、カスタム日付形式を指定できません。

この制限を克服するには、time.Time フィールドをラップし、独自のフィールドを実装する新しいカスタム構造体型を定義できます。 UnmarshalXML メソッド。このメソッドは、必要な形式を使用して XML 日付文字列を解析し、それに応じて基になる time.Time 値を設定します。

実装例

このカスタム UnmarshalXML を利用することにより、このメソッドを使用すると、独自の日付形式を効果的に指定でき、XML をアンマーシャリングするときに time.Time フィールドが正しく設定されるようになります。 data.

補足

type Transaction struct {
    //...
    DateEntered customTime `xml:"enterdate"` // Use our custom type that implements UnmarshalXML
    //...
}

type customTime struct {
    time.Time
}

func (c *customTime) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    const shortForm = "20060102" // yyyymmdd date format
    var v string
    d.DecodeElement(&v, &start)
    parse, err := time.Parse(shortForm, v)
    if err != nil {
        return err
    }
    *c = customTime{parse}
    return nil
}
ログイン後にコピー

XML 要素が日付を表す属性を使用する場合、同様の方法で UnmarshalXMLAttr を実装できます。

さらに参考として、提供されている Go プレイグラウンドで実装を示します。 http://play.golang.org/p/EFXZNsjE4a

以上がGolang で XML を「time.Time」フィールドにアンマーシャリングするときにカスタム日付形式を指定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート