Правильный путь для разложения разности на единицу времени, например, в this answer.
Другим вариантом было бы сохранить разницу даты в период и разницу во времени в период, но это может привести к негативным единиц в некоторых случаях:
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);
}
Может возвращать отрицательные дни в других случаях.
Как насчет продолжительности? См. Https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html#between-java.time.temporal.Temporal-java.time.temporal.Temporal- – rgrebski
Если i ' m correct, duration также не сохраняет даты в виде лет месяцев и дней, но преобразует их в часовые минуты и секунды. – logos
Просьба более точно рассказать о вашем вопросе, потому что теперь Im запутался. Образец кода также будет полезен – rgrebski