Я пытаюсь сохранить разницу между двумя LocalDateTimes. На самом деле я ищу такой класс, как Period, который позволяет мне сохранять дату как время (поскольку Period позволяет мне сохранять только дату).
Какой класс позволит мне это сделать?
Я пытаюсь сохранить разницу между двумя LocalDateTimes. На самом деле я ищу такой класс, как Period, который позволяет мне сохранять дату как время (поскольку Period позволяет мне сохранять только дату).
Какой класс позволит мне это сделать?
Правильный способ - разложить разницу по единицам времени, например, в этом ответе.
Другой вариант - сохранить разницу дат в периоде и разницу во времени в продолжительности, но в некоторых случаях это может привести к отрицательным единицам:
LocalDateTime now = LocalDateTime.now();
LocalDateTime before = now.minusMonths(1).minusDays(5).minusHours(2).minusMinutes(30);
Period p = Period.between(before.toLocalDate(), now.toLocalDate());
Duration d = Duration.between(before.toLocalTime(), now.toLocalTime());
System.out.println(p + " + " + d);
который выводит: P1M5D + PT2H30M
Угловые случаи: если before = now.minusMonths(1).plusDays(1).plusMinutes(30);
, продолжительность минус 30 минут. Это нелегко исправить, потому что выполнение интуитивно понятного:
if (d.isNegative()) {
p = p.minusDays(1);
d = d.plusDays(1);
}
В остальных случаях может возвращать отрицательные дни.
Duration
плюс один час. Что ж, один месяц всегда больше одного дня, но я бы не осмелился представить конечному пользователю такую продолжительность / период. Однако принятый ответ в повторяющейся ссылке относится к случаю границы месяца / дня.
- person Meno Hochschild; 15.06.2015
Я думаю, вам следует преобразовать их оба в миллисекунды, а затем произвести вычитание.
LocalDateTime a, b;
long timeInMillis = Math.abs(a.toDateTime().getMillis() - b.toDateTime().getMillis());
Тогда вы получите период в миллисекундах.
LocalDateTime
? Хорошо, вы хотите сохранить это, но что дальше? Хотите распечатать позже? Если да, то как? Любые другие варианты использования? - person Meno Hochschild   schedule 15.06.2015