Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何解析不同长度的字符串时间戳?_Go_Timestamp - Fatal编程技术网

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

Go 如何解析不同长度的字符串时间戳?,go,timestamp,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) 我会遇到如下错误

我有一个值片段,其中包含不同长度的时间戳。 其中大多数看起来像这样:

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"
我想完全按照它们原来的样子解析它们。 如何根据长度动态切换布局?
(为什么错误消息不同?

只需将
000000
替换为
999999

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

操场:.

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


文档提供了一些示例,最后一个示例解释了这种行为。

分数部分是否都是
0
s,或者如果不是,是否需要亚秒分辨率?在解析之前,很容易从所有时间戳的字符串中去掉它。不幸的是,它们并不都是
0
s,示例:
2016-07-04T09:30:33.031979Z
2016-10-23T22:01:01.41305Z
2016-10-23T14:50:55.0671Z