[英]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
文档:
小数点后跟一个或多个零表示小数秒,打印到给定的小数位数。 小数点后跟一个或多个九表示小数秒,打印到给定的小数位数,并删除尾随零。 解析时(仅),输入可能包含紧跟在秒字段之后的小数秒字段,即使布局并不表示它的存在。 在这种情况下,小数点后跟最大数字系列被解析为小数秒。
对于时间解析:
time.Parse
仍将在输入中接受它,并具有完整分辨率(“最大数字系列”)。 ( 来源)time.Parse
要求输入具有精确的小数位数。 ( 来源)time.Parse
实际上接受任意数量的小数位(最多 9)。 也就是说,行为与您根本没有指定小数秒相同(案例 #1)。 我认为文档在这一点上根本不清楚,但对于解析(不是格式化), .9
、 .99
、 .999
、 .999999
等都是完全等价的。 ( 来源)游乐场示例:https: //play.golang.org/p/aXYiaMsCVuz
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.