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中文网其他相关文章!