如何解析不同长度的字符串时间戳?

时间:2017-01-12 15:47:07

标签: go timestamp

我有一片值保持不同长度的时间戳。 他们中的大多数看起来像这样:

2006-01-02T15:04:05.000000Z

但其中一些更短:

2006-01-02T15:04:05.00000Z
2006-01-02T15:04:05.0000Z

如果我这样做:

str := dataSlice[j][0].(string)
layout := "2006-01-02T15:04:05.000000Z"
t, err := time.Parse(layout, str)

我收到的错误如下:

parsing time "2016-10-23T02:38:45.25986Z" as "2006-01-02T15:04:05.000000Z": cannot parse "" as ".000000"
parsing time "2016-10-23T21:43:59.0175Z" as "2006-01-02T15:04:05.000000Z": cannot parse ".0175Z" as ".000000"

我想完全像原来一样解析它们。 如何动态切换对应长度的布局? (为什么错误信息不同?)

2 个答案:

答案 0 :(得分:2)

对于时间布局,如果小数秒是可选的,请在布局中使用9而不是0。例如,2006-01-02T15:04:05.00000Z仅匹配小数点后5位数的时间。但是,2006-01-02T15:04:05.9Z匹配小数点后任何位数的时间,包括零。

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

Time.Format文档提供了示例,其中最后一个解释了这种行为。

答案 1 :(得分:1)

只需将000000替换为999999

layout := "2006-01-02T15:04:05.999999Z"

游乐场:https://play.golang.org/p/Wd7kXIpoWO