Ответ 1
Как это сделать, зависит от того, какие даты или классы даты и времени используются.
Если вы работаете в режиме реального времени (т.е. с часовыми поясами и т.д., поэтому время datetime может быть точно определено с точностью Instant
на линии времени), вы можете использовать класс Duration
(javadoc) - например
Duration diff = Duration.between(InstantProvider startInc, InstantProvider endInc);
где InstantProvider способен
В качестве альтернативы, если вы работаете в гипотетическом времени (т.е. без часовых поясов и т.д.), вы можете использовать класс Period
(javadoc), чтобы получить разницу между двумя экземплярами LocalDate
- например
// diff in days, months and years:
Period diff = Period.between(LocalDate start, LocalDate end);
// diff in days:
Period diff = Period.daysBetween(LocalDate start, LocalDate end);
Однако я не знаю о каких-либо удобных методах для получения разницы между двумя LocalDateTimes или LocalTimes. Но... это можно сделать с помощью Period следующим образом:
// diff between LocalDateTimes:
public static Period between(LocalDateTime start, LocalDateTime end){
return Period.of(
end.getYear()-start.getYear(),
end.getMonthOfYear().getValue()-start.getMonthOfYear().getValue(),
end.getDayOfMonth()-start.getDayOfMonth(),
end.getHourOfDay()-start.getHourOfDay(),
end.getMinuteOfHour()-start.getMinuteOfHour(),
end.getSecondOfMinute()-start.getSecondOfMinute(),
end.getNanoOfSecond()-start.getNanoOfSecond()
);
}
// diff between LocalTimes:
public static Period between(LocalTime start, LocalTime end){
return Period.of(0, 0, 0,
end.getHourOfDay()-start.getHourOfDay(),
end.getMinuteOfHour()-start.getMinuteOfHour(),
end.getSecondOfMinute()-start.getSecondOfMinute(),
end.getNanoOfSecond()-start.getNanoOfSecond()
);
}