Maison  >  Article  >  développement back-end  >  Comment décomposer les chaînes de date XML en champs Time.Time dans Go ?

Comment décomposer les chaînes de date XML en champs Time.Time dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-11 08:14:03489parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn