我正在解析数据库中的时间戳。我的布局如下:
layout = "2006-01-02 15:04:05.000000000 -0700 MST"
pipelineTS, err := time.Parse(layout, rawPipelineTS)
问题在于,有时小数秒不是9位数字,例如:
2018-12-18 15:25:08.73728596 +0000 UTC
当找到这样的值时,它会出错。有想法该怎么解决这个吗?时间戳来自数据库表。我需要用任意数量的小数第二位数字。
答案 0 :(得分:6)
小数点后跟一个或多个零表示小数 第二,打印到给定的小数位数。小数点 后跟一个或多个9代表小数秒,已打印 到给定的小数位数,并删除了结尾的零。
在布局小数秒中使用9,而不是零。
例如,
package main
import (
"fmt"
"time"
)
func main() {
layout := "2006-01-02 15:04:05.999999999 -0700 MST"
input := "2018-12-18 15:25:08.73728596 +0000 UTC" // 8 digits
t, err := time.Parse(layout, input)
fmt.Println(t, err)
input = "2018-12-18 15:25:08.7372 +0000 UTC" // 4 digits
t, err = time.Parse(layout, input)
fmt.Println(t, err)
input = "2018-12-18 15:25:08 +0000 UTC" // 0 digits
t, err = time.Parse(layout, input)
fmt.Println(t, err)
}
游乐场:https://play.golang.org/p/j4WBmz3ENke
输出:
2018-12-18 15:25:08.73728596 +0000 UTC <nil>
2018-12-18 15:25:08.7372 +0000 UTC <nil>
2018-12-18 15:25:08 +0000 UTC <nil>
答案 1 :(得分:1)
来自time
文档:
小数点后跟一个或多个零表示小数 第二,打印到给定的小数位数。小数点 后跟一个或多个9代表小数秒,已打印 到给定的小数位数,并删除了尾随零。 解析时(仅),输入内容可能包含小数秒字段 紧接在秒字段之后,即使布局没有 表示其存在。在这种情况下,小数点后跟一个 最大的数字序列被解析为小数秒。
用于时间解析: