time.Parse in Go с переменной долей секунды - PullRequest
0 голосов
/ 18 декабря 2018

Я анализирую метку времени из БД.Мой макет выглядит следующим образом:

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  

Когда он находит значение, подобное этому, он ошибаетсяиз.Любые идеи о том, как это исправить?Метки времени берутся из таблицы БД.Мне нужно, чтобы оно брало любое количество дробных секунд.

1 Ответ

0 голосов
/ 18 декабря 2018

Время упаковки

Десятичная точка, за которой следуют один или несколько нулей, представляет собой долю секунды, напечатанную с заданным количеством десятичных знаков.Десятичная точка, за которой следуют одна или несколько девяток, представляет дробную секунду, напечатанную с заданным числом десятичных знаков, с удалением завершающих нулей.


Используйте для разметки дробные девятки, а не нулисекунд.

Например,

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>
...