Golang XML Unmarshal and time.Time fields

前端 未结 4 1765
南笙
南笙 2021-02-04 01:14

I have XML data I am retrieving via a REST API that I am unmarshal-ing into a GO struct. One of the fields is a date field, however the date format returned by the API does not

4条回答
  •  太阳男子
    2021-02-04 01:50

    I had the same problem.

    time.Time doesn't satisfy the xml.Unmarshaler interface. And you can not specify a date fomat.

    If you don't want to handle the parsing afterward and you prefer to let the xml.encoding do it, one solution is to create a struct with an anonymous time.Time field and implement your own UnmarshalXML with your custom date format.

    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
    }
    

    If your XML element uses an attribut as a date, you have to implement UnmarshalXMLAttr the same way.

    See http://play.golang.org/p/EFXZNsjE4a

提交回复
热议问题