繁体   English   中英

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

[英]time.Parse in Go with varying fractional second length

我正在解析来自数据库的时间戳。 我的布局如下:

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  

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

包车时间

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


为布局小数秒使用 nines,而不是 zeros。

例如,

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>

time文档:

小数点后跟一个或多个零表示小数秒,打印到给定的小数位数。 小数点后跟一个或多个九表示小数秒,打印到给定的小数位数,并删除尾随零。 解析时(仅),输入可能包含紧跟在秒字段之后的小数秒字段,即使布局并不表示它的存在。 在这种情况下,小数点后跟最大数字系列被解析为小数秒。

对于时间解析:

  1. 如果您未在布局中指定小数秒, time.Parse仍将在输入中接受它,并具有完整分辨率(“最大数字系列”)。 来源
  2. 如果您指定带有一个或多个零的小数秒, time.Parse要求输入具有精确的小数位数。 来源
  3. 如果您用一个或多个 9 指定小数秒, time.Parse实际上接受任意数量的小数位(最多 9)。 也就是说,行为与您根本没有指定小数秒相同(案例 #1)。 我认为文档在这一点上根本不清楚,但对于解析(不是格式化), .9.99.999.999999等都是完全等价的。 来源

游乐场示例:https: //play.golang.org/p/aXYiaMsCVuz

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM