Обрезать до миллисекунды перед сравнением
Я не уверен, что это поможет в вашей ситуации, но в случае и для всех, кто читает дальше: правильный способ сравнения двух Instant
объектов с учетом только миллисекунд и грубееозначает усечение каждого с точностью до миллисекунды (здесь, в Java):
Instant instant1 = Instant.parse("2018-12-14T08:25:54.232235133Z");
Instant instant2 = Instant.parse("2018-12-14T08:25:54.232975217Z");
if (instant1.truncatedTo(ChronoUnit.MILLIS).equals(instant2.truncatedTo(ChronoUnit.MILLIS))) {
System.out.println("Equal to the millisecond");
} else {
System.out.println("Not equal to the millisecond");
}
Вывод:
равно миллисекунде
Если вы знаете дляфакт, что один из них уже был усечен в обратном направлении через JSON (и вы считаете это обязательным требованием), вам, конечно, не нужно усекать его снова.
ИспользуйтеЧасы с точностью до миллисекунды
Использование Clock
для тестирования часто является хорошей идеей.Это может помочь вам написать воспроизводимые тесты.Вы можете легко иметь часы, которые отсчитывают только миллисекунды:
Clock c = Clock.tickMillis(ZoneOffset.UTC);
System.out.println(c.instant());
System.out.println(Instant.now(c));
Вывод при запуске только сейчас:
2018-12-14T10:48:47.929Z
2018-12-14T10:48:47.945Z
Как видите, сгенерированный Instant
объекты имеют только три десятичных знака в секундах, то есть с точностью до миллисекунды и ничего более точного.Когда вы используете Clock
только для рисования Instant
с, не имеет значения, какой часовой пояс вы передаете tickMillis
.