Go 中的错误解析时间,微秒数可变

Blu*_*Sky 1 go

我正在尝试将字符串解析为时间对象。问题是微秒项中的位数发生了变化,这会破坏解析。例如,这工作正常:

package main

import (
    "fmt"
    "time"
)

func main() {
    timeText := "2017-03-25T10:01:02.1234567Z"
    layout := "2006-01-02T15:04:05.0000000Z"
    t, _ := time.Parse(layout, timeText)
    fmt.Println(t)
}
Run Code Online (Sandbox Code Playgroud)

但这会导致错误,因为微秒位数与布局不匹配:

package main

import (
    "fmt"
    "time"
)

func main() {
    timeText := "2017-03-25T10:01:02.123Z" // notice only 3 microseconds digits here
    layout := "2006-01-02T15:04:05.0000000Z"
    t, _ := time.Parse(layout, timeText)
    fmt.Println(t)
}
Run Code Online (Sandbox Code Playgroud)

我如何解决这个问题,以便仍然解析微秒项,但有多少位数字并不重要?

Mar*_*ark 5

在亚秒格式中使用 9 而不是零,例如

timeText := "2017-03-25T10:01:02.1234567Z"
layout := "2006-01-02T15:04:05.99Z"
t, _ := time.Parse(layout, timeText)
fmt.Println(t) //prints 2017-03-25 10:01:02.1234567 +0000 UTC
Run Code Online (Sandbox Code Playgroud)

文档

// Fractional seconds can be printed by adding a run of 0s or 9s after
// a decimal point in the seconds value in the layout string.
// If the layout digits are 0s, the fractional second is of the specified
// width. Note that the output has a trailing zero.
do("0s for fraction", "15:04:05.00000", "11:06:39.12340")

// If the fraction in the layout is 9s, trailing zeros are dropped.
do("9s for fraction", "15:04:05.99999999", "11:06:39.1234")
Run Code Online (Sandbox Code Playgroud)