Как получить максимум двух экземпляров ZonedDateTime? - PullRequest
2 голосов
/ 22 октября 2019

У меня есть два ZonedDateTime экземпляра:

final ZonedDateTime a = ...;
final ZonedDateTime b = ...;

Я хочу получить максимум из этих двух значений. Я хочу избежать написания специального кода.

Каков наилучший способ сделать это в Java 8? В настоящее время я делаю это следующим образом:

final ZonedDateTime c = Stream.of(a, b).max(ChronoZonedDateTime::compareTo).get();

Есть ли лучшие подходы?

Ответы [ 2 ]

4 голосов
/ 22 октября 2019

Вы можете просто позвонить isAfter:

ZonedDateTime max = a.isAfter(b) ? a : b;

или поскольку класс реализует Comparable

a.compareTo(b);

Как указано OleV.V. в комментариях разница между двумя методами сравнения времени. Таким образом, они могут давать разные результаты для одинаковых значений

DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
ZonedDateTime time1 = ZonedDateTime.from(formatter.parse("2019-10-31T02:00+01:00"));
ZonedDateTime time2 = ZonedDateTime.from(formatter.parse("2019-10-31T01:00Z"));

System.out.println(time1.isAfter(time2) + " - " + time1.isBefore(time1) + " - " + time1.isEqual(time2));
System.out.println(time1.compareTo(time2));

Генерирует

false - false - true
1

1 голос
/ 22 октября 2019

ZonedDateTime реализует интерфейс Comparable, так что вы можете просто использовать Collections.max

Collections.max(Arrays.asList(a,b));
...