Formatage de l'heure dans Go XML Unmarshal pour les champs time.Time
La désagrégation des données XML dans des structures Go peut parfois rencontrer des défis lorsque vous rencontrez des champs de date avec formats autres que ceux par défaut. Cet article aborde le problème de l'analyse des dates sans recourir à la conversion de chaînes.
Considérez l'exemple de structure Transaction, qui inclut un champ DateEntered de type time.Time. L'API renvoyant les données XML utilise un format de date "aaaammjj", différent du format par défaut utilisé par time.Time.
Malheureusement, time.Time n'implémente pas l'interface xml.Unmarshaler, empêchant la spécification directe d'un format de date personnalisé. Pour surmonter cette limitation, une structure personnalisée peut être créée avec un champ time.Time anonyme et une implémentation UnmarshalXML personnalisée :
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 }
En implémentant UnmarshalXML, le type customTime peut gérer le format de date personnalisé "aaaammjj" et stocker la valeur analysée dans le champ time.Time anonyme dans la structure de transaction parent.
Cette approche garantit que les dates sont analysées et stockées au format time.Time correct sans avoir besoin d'une conversion de chaîne manuelle ou de s'appuyer sur une analyse par défaut hypothèses.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!