Для разницы в годах, месяцах и днях есть java.time.Period
, который вы можете легко используйте, чтобы получить то, что вы хотите:
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.of(2022, 1 , 25 , 12 , 20 , 33);
LocalDateTime now = LocalDateTime.now();
// get the difference in years, months and days
Period p = Period.between(now.toLocalDate(), localDateTime.toLocalDate());
// and print the result(s)
System.out.println("Difference between " + localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
+ " and " + now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) + " is:\n"
+ p.getYears() + " years, " + p.getMonths() + " months, " + p.getDays() + " days");
}
Вывод этого примера кода будет (в зависимости от текущего дня, конечно):
Difference between 2022-01-25T12:20:33 and 2020-02-25T10:52:43.327 is:
1 years, 11 months, 0 days
Вы можете использовать java.time.Duration
как показано в одном из других ответов, чтобы получить дополнительную разницу в часах, минутах и секундах. См. Этот пример (который в основном является приведенным выше, плюс расчет времени):
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.of(2022, 1 , 25 , 12 , 20 , 33);
LocalDateTime now = LocalDateTime.now();
// get the difference in years, months and days (date related difference)
Period p = Period.between(now.toLocalDate(), localDateTime.toLocalDate());
// and the difference in hours, minutes and seconds (time-of-day related difference)
Duration d = Duration.between(now.toLocalTime(), localDateTime.toLocalTime());
long totalSeconds = d.getSeconds();
long hours = totalSeconds / 3600;
long minutes = (totalSeconds % 3600) / 60;
long seconds = totalSeconds % 60;
// and print the result(s)
System.out.println("Difference between " + localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
+ " and " + now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) + " is:\n"
+ p.getYears() + " years, " + p.getMonths() + " months, " + p.getDays() + " days, "
+ hours + " hours, " + minutes + " minutes, " + seconds + " seconds");
}
Вывод:
Difference between 2022-01-25T12:20:33 and 2020-02-25T11:25:42.712 is:
1 years, 11 months, 0 days, 0 hours, 54 minutes, 50 seconds
Если вы получаете java.util.Date
s или расширяете устаревший код (или если вам просто лень изменить весь код на использование java.time
), вы можете использовать следующие методы совместимости:
LocalDateTime fromDate = LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault());
Date fromLocalDateTime = Date.from(LocalDateTime.now().toInstant((ZoneOffset.UTC)));