为了账号安全,请及时绑定邮箱和手机立即绑定

Golang unmarshall mysql format time to time.Time

Golang unmarshall mysql format time to time.Time

Go
慕尼黑8549860 2022-01-17 18:26:57
我有一个2016-06-16 22:21:00XML 文档内的格式的时间。我想用 Golang 解析那个时间。type Price struct {    Instrument string `xml:"Instrument"`    Bid float32 `xml:"Bid"`    Ask float32 `xml:"Ask"`    Updated time.Time  `xml:"Updated"`}type Prices []Pricevar p Priceserr := xml.Unmarshal(body, &p)if err != nil {    log.Panicln(err)}我的输出错误如下:panic: parsing time "2016-06-16 20:59:57" as "2006-01-02T15:04:05Z07:00": cannot parse " 20:59:57" as "T"如何将 mysql 格式的日期时间字符串解组为time.Time?我已经读到我需要创建一个新的自定义时间来实现time.Time.type customTime struct {    time.Time}func (c *customTime) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {    const shortForm = "2016-12-10 01:00:00" // yyyy-mm-dd hh:ii:ss 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}但是当我这样做时,我收到以下错误。panic: parsing time "2016-06-16 20:59:57": month out of range
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

你想要const shortForm = "2006-01-02 15:04:05"。这有点奇怪,但是time.Parse理解格式的方式是你必须给出这个特定的时间作为例子。请参阅https://golang.org/src/time/format.go上的评论:


// These are predefined layouts for use in Time.Format and Time.Parse.

// The reference time used in the layouts is the specific time:

//    Mon Jan 2 15:04:05 MST 2006

// which is Unix time 1136239445. Since MST is GMT-0700,

// the reference time can be thought of as

//    01/02 03:04:05PM '06 -0700

// To define your own format, write down what the reference time would look

// like formatted your way; see the values of constants like ANSIC,

// StampMicro or Kitchen for examples.

您可能可以想象为什么在这里使用预定义的日期很重要……例如,图书馆需要知道您的意思是 01/02 是 1 月 2 日还是 2 月 1 日。有一个预定义的日期(巧妙地构造以避免重复值)可以消除歧义。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信