在golang中parsingdatestring

我试着在lang中parsingdatestring“2014-09-12T11:45:26.371Z”。

layout := "2014-09-12T11:45:26.371Z" str := "2014-11-12T11:45:26.371Z" err, t := time.Parse(layout , str) 

parsing时间“2014-11-12T11:47:39.489Z”:月份超出范围

我得到这个错误。

如何parsing这个datestring?

使用这里描述的确切布局编号和一个不错的博客在这里 。

所以:

 layout := "2006-01-02T15:04:05.000Z" str := "2014-11-12T11:45:26.371Z" t, err := time.Parse(layout, str) if err != nil { fmt.Println(err) } fmt.Println(t) 

得到:

 >> 2014-11-12 11:45:26.371 +0000 UTC 

我知道。 令人难以置信。 也第一次抓到我。 Go只是不使用date时间组件的抽象语法( YYYY-MM-DD ),但是这些确切的数字( 我认为这是第一次提交的时间 ,根据这个,有人知道吗?

RickyA的回答中描述的布局确实是“ 2006-01-02T15:04:05.000Z ”。
这不是“第一次走的时间”,而是记忆所述布局的助记方式。
见pkg / time :

在布局中使用的参考时间是:

 Mon Jan 2 15:04:05 MST 2006 

这是Unix时间1136239445
由于MST是GMT-0700,参考时间可以被认为是

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

(1,2,3,4,5,6,7,前提是你记得1是一个月份,而2是一天,对于像我这样的欧洲人来说,这不太容易习惯于日date格式)

如“ time.parse:为什么golang不正确地parsing时间? ”所示,必须严格遵守布局(使用1,2,3,4,5,6,7)。

回答为了避免input"2006-01-02T15:04:05.000Z"作为布局,您可以使用该包的常量RFC3339 。

 str := "2014-11-12T11:45:26.371Z" t, err := time.Parse(time.RFC3339, str) if err != nil { fmt.Println(err) } fmt.Println(t) 

https://play.golang.org/p/Dgu2ZvHwTh

这可能是超级晚,但是这是为那些可能会遇到这个问题,可能想要使用外部包parsingdatestring的人。

我试过寻找一个图书馆,我发现这一个:

https://github.com/araddon/dateparse

我认为它是一个非常酷的软件包。 你可能想检查一下并研究代码。