Вы получаете наилучшую точность и точность, которую Java может дать вам от Instant.now()
. Достаточно ли этого для решения вашей проблемы, я не смею сказать. Конечно, на обычном компьютере нет способа получить точность наносекунды.
Возможно, вам придется сыграть несколько хитростей с добавлением искусственной наносекунды в случае, если Instant.now()
дважды возвращает одно и то же значение.
Или просто используйте трюк, упомянутый в ваша ссылка :
Введите произвольный новый тег для обеспечения уникальности.
Для хитрости добавления искусственной наносекунды вы можете, например, использовать что-то вроде следующего:
public class TimeProvider {
Instant last = Instant.now().minusSeconds(1);
Instant getUniqueInstant() {
Instant result = Instant.now();
if (! result.isAfter(last)) {
result = last.plusNanos(1);
}
last = result;
return result;
}
}
Когда я быстро прорисовываю время из этого класса на своем компьютере, я получаю результаты, как показано ниже. Казалось бы из вывода (как я его интерпретирую):
- Моя JVM не может получить более высокую точность, чем микросекунды (6 десятичных знаков в секундах) от системных часов.
- Время от времени добавляется искусственная наносекунда для сохранения уникальности моментов.
.
2018-08-29T15:18:35.617616001Z
2018-08-29T15:18:35.617617Z
2018-08-29T15:18:35.617618Z
2018-08-29T15:18:35.617618001Z
2018-08-29T15:18:35.617619Z
2018-08-29T15:18:35.617619001Z
2018-08-29T15:18:35.617620Z
2018-08-29T15:18:35.617620001Z
2018-08-29T15:18:35.617621Z
2018-08-29T15:18:35.617621001Z
2018-08-29T15:18:35.617622Z
2018-08-29T15:18:35.617623Z
2018-08-29T15:18:35.617623001Z
2018-08-29T15:18:35.617624Z
2018-08-29T15:18:35.617624001Z
2018-08-29T15:18:35.617625Z
2018-08-29T15:18:35.617625001Z
2018-08-29T15:18:35.617626Z
2018-08-29T15:18:35.617626001Z
2018-08-29T15:18:35.617627Z
2018-08-29T15:18:35.617627001Z
2018-08-29T15:18:35.617628Z
2018-08-29T15:18:35.617631Z
2018-08-29T15:18:35.617634Z
2018-08-29T15:18:35.617635Z
2018-08-29T15:18:35.617636Z
2018-08-29T15:18:35.617636001Z
2018-08-29T15:18:35.617637Z
2018-08-29T15:18:35.617637001Z
2018-08-29T15:18:35.617638Z