По умолчанию метод toString
Instant
использует форматер DateTimeFormatter.ISO_INSTANT. Это форматировщик не будет печатать цифры для фракции-в-секунду, если они происходят, чтобы быть 0.java.time формат даты ISO с фиксированными цифрами миллиса (в Java 8 и более поздних)
java-time примеры:
2015-10-08T17:13:07.589Z
2015-10-08T17:13:07Z
Joda-Time примеры (и то, что я бы ожидать от java.time):
2015-10-08T17:13:07.589Z
2015-10-08T17:13:07.000Z
Это действительно расстраивает синтаксический анализ в некоторых системах. Elasticsearch была первой проблемой, с которой я столкнулся, нет предопределенного формата, который поддерживает дополнительные миллисы, но я, вероятно, могу обойти это с помощью специального формата. По умолчанию просто неправильно.
Похоже, что вы действительно не можете создать собственную строку формата для Instants. Единственный вариант, реализующий мой собственный java.time.format.DateTimeFormatterBuilder.InstantPrinterParser?
Ваша цель - просто найти, имеет ли эта цифра миллисекунду точность? –
Цель состоит в том, чтобы форматировать эту дату с дробной второй частью, даже если эти миллисекунды равны 0. Другими словами, имитируйте то, что делает Джода. –
Быстрое напоминание: java.time обеспечивает разрешение [nanoseconds] (https://en.wikipedia.org/wiki/Nanosecond), в отличие от миллисекундного разрешения Joda-Time & java.util.Date. Это означает до девяти (9) цифр дробной секунды. Поэтому, если вы ограничены до 3, вы можете скрывать/потерять данные. См. [Эту мою схему] (http://i.stack.imgur.com/OW0RW.png). –