Назад в Блог
3 min read

Как рассчитать возраст в Python (примеры datetime и dateutil)

Узнайте, как вычислить возраст по дате рождения в Python. Включает пройденные годы, возраст на определенную дату и распространенные ошибки, такие как високосные годы и часовые пояса.

Как рассчитать возраст в Python (примеры datetime и dateutil)

Как рассчитать возраст в Python (примеры datetime и dateutil)

Если вам нужнорассчитать возраст в Pythonначиная с даты рождения, главное правильно определить возраст: большинству приложений требуетсязавершено лет(полные дни рождения), а не только разница между годами.

1) Завершенные годы (безопасное определение)

Возвращает количество полных лет с даты рождения (DOB). Он вычитает 1, если день рождения еще не наступил в текущем году.

from datetime import date

def age_years(dob: date, as_of: date | None = None) -> int:
    if as_of is None:
        as_of = date.today()
    years = as_of.year - dob.year
    before_birthday = (as_of.month, as_of.day) < (dob.month, dob.day)
    return years - 1 if before_birthday else years

print(age_years(date(2000, 10, 5), date(2026, 2, 26)))

2) Возраст на конкретную дату (не только на сегодняшний день)

Во многих случаях использования требуется дата «по состоянию»: цены на страховку, проверки соответствия требованиям, прекращение обучения в школах, отчеты. Функция выше уже поддерживает это черезas_of.

3) Точный стиль вывода (годы и месяцы)

Если вы хотите получить результат типа «25 лет 4 месяца», используйтеdateutil.relativedelta(он правильно обрабатывает длину месяца).

from datetime import date
from dateutil.relativedelta import relativedelta

def age_ym(dob: date, as_of: date | None = None):
    if as_of is None:
        as_of = date.today()
    rd = relativedelta(as_of, dob)
    return rd.years, rd.months

print(age_ym(date(2000, 10, 5), date(2026, 2, 26)))

4) Распространенные ошибки (и как их избежать)

  • Дни рождения високосные дни:решите, как вы хотите относиться к 29 февраля в невисокосные годы. Во многих системах используется дата 28 февраля или 1 марта. Поведение библиотеки имеет значение, поэтому проверьте ее.
  • Даты и часовые пояса:для рождения, предпочитаюdateнадdatetime. Если вам необходимо использовать дату и время, сначала нормализуйте ее к тому же часовому поясу.
  • Будущий дата рождения или отсутствующие значения:проверять входные данные, чтобы избежать отрицательных возрастов или сбоев.

Быстрая проверка (без кода)

Если вам нужен быстрый результат, воспользуйтесь онлайн-калькулятором:Рассчитать возраст онлайн.

Связанные руководства

Часто задаваемые вопросы

Почему (сегодня.год - доб.год) иногда неправильно?

Потому что он игнорирует, наступил ли уже день рождения в этом году. Перед днем ​​рождения необходимо вычесть 1.

Должен ли я использовать дату и время для даты рождения?

Использоватьdateкогда это возможно. Дата рождения - это календарный день, и часовые пояса могут смещать дату и время в течение дня.