Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как вычислить возраст по дате рождения

Короткий ответ

Period.between() от даты рождения до сегодняшнего дня даёт полное число лет. В примере «сегодня» зафиксировано, чтобы результат был одинаковым:

void main() {
    var birthday = LocalDate.of(1990, 7, 15);
    var today = LocalDate.of(2026, 3, 8);
 
    IO.println(Period.between(birthday, today).getYears());
}

Результат:

35

В реальном коде используйте LocalDate.now().

Через ChronoUnit

ChronoUnit.YEARS.between() возвращает то же самое одним числом:

void main() {
    var birthday = LocalDate.of(1990, 7, 15);
 
    IO.println(ChronoUnit.YEARS.between(birthday, LocalDate.of(2026, 7, 14)));
    IO.println(ChronoUnit.YEARS.between(birthday, LocalDate.of(2026, 7, 15)));
}

Результат:

35
36

Возраст полностью

Period хранит и месяцы с днями:

void main() {
    var age = Period.between(LocalDate.of(2024, 1, 20), LocalDate.of(2026, 3, 8));
    IO.println(age.getYears() + " y " + age.getMonths() + " m " + age.getDays() + " d");
}

Результат:

2 y 1 m 16 d

Частая ошибка

Вычитать годы: 2026 - 1990. Если день рождения в этом году ещё не наступил, возраст получается на год больше:

void main() {
    var birthday = LocalDate.of(1990, 7, 15);
    var today = LocalDate.of(2026, 3, 8);
 
    IO.println(today.getYear() - birthday.getYear());
    IO.println(Period.between(birthday, today).getYears());
}

Результат:

36
35

Функции из этого ответа

  • Period — Календарный промежуток в годах, месяцах и днях — например, возраст.
  • ChronoUnit.between() — Считает количество целых единиц (дней, месяцев, часов) между двумя датами или моментами.
  • LocalDate.now() — Возвращает сегодняшнюю дату по часам и часовому поясу компьютера.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.