Когда вы видите меньше цифр в дробной части секунды, это потому, что он будет заканчиваться нулями, а их пропуск не меняет значение времени.
Похоже, вы генерировали эти выходные данные путем маршалинга некоторых значений (содержащих метки времени) в JSON. JSON-представление time.Time
«управляется» как Time.MarshalJSON()
, что:
Время - это строка в кавычках в формате RFC 3339, с точностью до секунды, если таковая имеется.
См. Этот пример:
t1 := time.Date(2019, 5, 10, 11, 12, 13, 123456789, time.UTC)
fmt.Println(t1)
t2 := time.Date(2019, 5, 10, 11, 12, 13, 123456700, time.UTC)
fmt.Println(t2)
Это выводит:
2019-05-10 11:12:13.123456789 +0000 UTC
2019-05-10 11:12:13.1234567 +0000 UTC
Марширование их в JSON:
data, err := json.Marshal(t1)
fmt.Println(string(data), err)
data, err = json.Marshal(t2)
fmt.Println(string(data), err)
Дает вывод:
"2019-05-10T11:12:13.123456789Z" <nil>
"2019-05-10T11:12:13.1234567Z" <nil>
Если вы хотите, чтобы нули появлялись в выходных данных, используйте time.Format()
и используйте столько нулей в строке формата для вторых дробей, сколько цифр вы хотите в выходных данных. Это задокументировано в time
пакет: константы :
Десятичная точка, за которой следует один или несколько нулей, представляет долю секунды, , напечатанную с указанным количеством десятичных знаков . Десятичная точка, за которой следуют одна или несколько девяток, представляет дробную секунду, напечатанную с заданным количеством десятичных знаков, с удалением завершающих нулей .
Time.MarshalJSON()
использует time.RFC3339Nano
, что:
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
так что завершающие нули удаляются. Если вы используете нули вместо девяток в формате:
fmt.Println(t2.Format("2006-01-02T15:04:05.000000000Z"))
Это выводит:
2019-05-10T11:12:13.123456700Z
Попробуйте примеры на Go Playground .