Проверьте, находятся ли два экземпляра "Мгновенный" в одной и той же дате в Java 8

У меня есть два экземпляра класса Instant из java.time, например:

Instant instant1 = Instant.now();
Instant instant2 = Instant.now().plus(5, ChronoUnit.HOURS);

Теперь я хотел бы проверить, действительно ли два экземпляра Instant на одной и той же дате (совпадение день, месяц и год). Я просто подумал, что просто используйте блестящий новый LocalDate и универсальный статический метод from:

LocalDate localdate1 = LocalDate.from(instant1);
LocalDate localdate2 = LocalDate.from(instant2);

if (localdate1.equals(localdate2)) {
   // All the awesome
}

За исключением того, что универсальный метод from не является настолько универсальным, и Java жалуется во время выполнения с исключением:

java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: 2014-11-04T18:18:12Z of type java.time.Instant

Который оставляет меня на квадрате 1.

Каков рекомендуемый/самый быстрый способ проверить, имеют ли два экземпляра Instant одну и ту же дату (имеют один и тот же день, месяц и год)?

Ответ 1

Класс Instant не работает с человеческими единицами времени, такими как лет, месяцев или дней. Если вы хотите выполнить вычисления в тех единиц, вы можете конвертировать Instant в другой класс, например LocalDateTime или ZonedDateTime, путем привязки Мгновенного с временем зона. Затем вы можете получить доступ к значению в требуемых единицах.

http://docs.oracle.com/javase/tutorial/datetime/iso/instant.html

Поэтому я предлагаю следующий код:

LocalDate ld1 = LocalDateTime.ofInstant(instant1, ZoneId.systemDefault()).toLocalDate();
LocalDate ld2 = LocalDateTime.ofInstant(instant2, ZoneId.systemDefault()).toLocalDate();

if (ld1.isEqual(ld2)) {
    System.out.println("blubb");
}

В качестве альтернативы вы можете использовать

instant.atOffset(ZoneOffset.UTC).toLocalDate();