time.Parse in Go,具有不同的小数秒长度

Mar*_*ekT 2 time timestamp go datetime-parsing

我正在从数据库中解析时间戳.我的布局如下:

layout = "2006-01-02 15:04:05.000000000 -0700 MST"

pipelineTS, err := time.Parse(layout, rawPipelineTS)
Run Code Online (Sandbox Code Playgroud)

问题是有时小数秒不是9位数,例如:

2018-12-18 15:25:08.73728596 +0000 UTC  
Run Code Online (Sandbox Code Playgroud)

当它找到这样的值时,它就会出错.有想法该怎么解决这个吗?时间戳来自DB表.我需要它取任意数量的小数位数.

pet*_*rSO 6

包装时间

小数点后跟一个或多个零表示小数秒,打印到给定的小数位数.小数点后跟一个或多个9表示小数秒,打印到给定的小数位数,并删除尾随零.


使用nines而不是零来表示布局小数秒.

例如,

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)
}
Run Code Online (Sandbox Code Playgroud)

游乐场: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>
Run Code Online (Sandbox Code Playgroud)