首页  >  文章  >  后端开发  >  如何在 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