Go で XML 日付文字列を Time.Time フィールドにアンマーシャリングする方法

Barbara Streisand
リリース: 2024-11-11 08:14:03
オリジナル
529 人が閲覧しました

How to Unmarshal XML Date Strings into Time.Time Fields in Go?

Go XML での時刻の書式設定 time.Time フィールドのアンマーシャル

XML データを Go 構造体にアンマーシャリングすると、日付フィールドに遭遇すると問題が発生することがあります。デフォルト以外の形式。この記事では、文字列変換に依存せずに日付を解析する問題について説明します。

time.Time 型の DateEntered フィールドを含むサンプル構造体 Transaction について考えてみましょう。 XML データを返す API は、time.Time で使用されるデフォルトの形式とは異なる「yyyymmdd」日付形式を使用します。

残念ながら、time.Time は xml.Unmarshaler インターフェイスを実装していないため、直接指定できません。カスタムの日付形式。この制限を克服するために、匿名の time.Time フィールドとカスタム UnmarshalXML 実装を使用してカスタム構造体を作成できます。

type Transaction struct {
    // ...
    DateEntered     customTime     `xml:"enterdate"` // use your own type that satisfies 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
}
ログイン後にコピー

UnmarshalXML を実装することで、customTime 型はカスタムの "yyyymmdd" 日付形式と格納を処理できます。親トランザクション構造体の匿名 time.Time フィールドの解析された値。

このアプローチにより、日付が手動で文字列変換したり、デフォルトの解析仮定に依存したりする必要がなく、正しい time.Time 形式で解析および保存されます。

以上がGo で XML 日付文字列を Time.Time フィールドにアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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