首頁  >  文章  >  後端開發  >  如何在 Go 中將 XML 日期字串解組為 Time.Time 欄位?

如何在 Go 中將 XML 日期字串解組為 Time.Time 欄位?

Barbara Streisand
Barbara Streisand原創
2024-11-11 08:14:03489瀏覽

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

Go XML Unmarshal 中的時間格式。時間欄位

在遇到以下日期欄位時,將 XML 資料解組到 Go 結構中有時會遇到挑戰非預設格式。本文解決了在不依賴字串轉換的情況下解析日期的問題。

考慮範例結構 Transaction,其中包含類型為 time.Time 的 DateEntered 欄位。傳回 XML 資料的 API 使用「yyyymmdd」日期格式,這與 time.Time 使用的預設格式不同。

不幸的是,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」日期格式並儲存父Transaction結構中的匿名time.Time 欄位中的解析值。

此方法可確保日期已解析並儲存在正確的位置time.Time 格式,無需手動字串轉換或依賴預設解析假設。

以上是如何在 Go 中將 XML 日期字串解組為 Time.Time 欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn