LocalDate из java .time и Collections.max ()
Используйте java .time, современный Java API даты и времени, для работы с датами. Во-первых, java .time позволяет раз и навсегда объявить средство форматирования:
private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofPattern("MM/dd/yyyy");
Я понимаю, что конечная дата должна быть последней из dateOne
, dateTwo
и даты отсечения . Учитывая, что DateServiceImpl
использует LocalDate
вместо Date
, logi c можно упростить:
LocalDate dateOne = item.getDateOne();
LocalDate dateTwo = item.getDateTwo();
String cutOffDate = "01/01/2020";
LocalDate cDate = LocalDate.parse(cutOffDate, DATE_FORMATTER);
LocalDate finalDate = Collections.max(Arrays.asList(dateOne, dateTwo, cDate));
item.setFinalDate(finalDate);
Я пропустил объявления final
и сумму logi c, поскольку они не имели отношения к заданному вопросу; вы можете вернуть их в себя.
A LocalDate
- это дата без времени суток. Я думал, что это то, что вам нужно, проверьте себя.
Изменить: как предлагает в комментарии Бэзил Бурк, при использовании Java 9 или более поздней версии вы, вероятно, предпочтете List.of()
вместо Arrays.asList()
:
LocalDate finalDate = Collections.max(List.of(dateOne, dateTwo, cDate));
Для ситуаций, когда этого недостаточно, LocalDate
также имеет методы isBefore
и isAfter
для сравнения.
Collections.max () также работает с Date
Если вы не можете позволить себе обновить DateServiceImpl
до java .time прямо сейчас, вы можете использовать Collections.max()
на трех старомодных объектах Date
таким же образом.
Collections.max()
также поставляется в перегруженной версии, которая принимает Comparator
в качестве второго аргумента. Поскольку и LocalDate
, и Date
реализуют Comparable
, нам это здесь не нужно.
Ссылки