Проверьте, находятся ли два экземпляра "Мгновенный" в одной и той же дате в 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();