在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)
这可能是超级晚,但是这是为那些可能会遇到这个问题,可能想要使用外部包parsingdatestring的人。
我试过寻找一个图书馆,我发现这一个:
https://github.com/araddon/dateparse
我认为它是一个非常酷的软件包。 你可能想检查一下并研究代码。