Как сравнить два периода в java 8?Как сравнить два java.time.Period в java 8?
E.g.
Period one = Period.of(10,0,0);
Period two = Period.of(8,0,0);
здесь, в этом случае один больше двух.
Как сравнить два периода в java 8?Как сравнить два java.time.Period в java 8?
E.g.
Period one = Period.of(10,0,0);
Period two = Period.of(8,0,0);
здесь, в этом случае один больше двух.
Правильно сказано JB Nizet. Вы не можете сравнивать периоды, так как java doc в классе Period имеет аналогичный класс Period (Duration), доступный в java, который вы можете использовать, это зависит от ваших бизнес-требований.
«Продолжительность и периоды различаются в зависимости от летнего времени при добавлении в ZonedDateTime. Продолжительность будет содержать точное количество секунд, поэтому продолжительность одного дня всегда ровно 24 часа. добавьте концептуальный день, пытаясь сохранить местное время ».
Period period = Period.of(10, 0, 0);
Period period2 = Period.of(10, 0, 0);
// No compareTo method in period
System.out.println(period.compareTo(period2));
Duration duration = Duration.ofDays(3);
Duration duration2 = Duration.ofDays(3);
// Can compare durations as it gives you the exact time
System.out.println(duration.compareTo(duration2));
Это правда, что сравнение двух Period
объектов не имеет смысла, в общем случае, из-за неопределенной стандартной длины месяца.
Однако во многих ситуациях вы вполне можете жить с реализацией, аналогичной той, что следует. Контракт будет аналогичен договору compareTo()
:
public int comparePeriodsApproximately(Period p1, Period p2) {
return period2Days(p1) - period2Days(p2);
}
private int period2Days(Period p) {
if (p == null) {
return 0;
}
return (p.getYears() * 12 + p.getMonths()) * 30 + p.getDays();
}
Периоды несопоставимы. И для этого есть причина. Например: это период в один месяц больше или меньше, чем период в 30 дней? Ответ в том, что это зависит. Вы можете добавить два периода к данному LocalDate и посмотреть, какой из двух LocalDates больше. Но результат может зависеть от того, с какого сайта LocalDate вы начинаете. –
@JBNizet Полностью правильный комментарий и исправление того, что 'Period' не является и не должно быть сопоставимым, тем не менее дизайнеры JSR-310 разрешили/определили метод' isNegative() 'с безумным определением и реализацией, чтобы обойти« P1M- 30D ". Очень болен. –