Как рассчитать возраст в Python (примеры datetime и dateutil)
Узнайте, как вычислить возраст по дате рождения в Python. Включает пройденные годы, возраст на определенную дату и распространенные ошибки, такие как високосные годы и часовые пояса.
Как рассчитать возраст в 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. Если вам необходимо использовать дату и время, сначала нормализуйте ее к тому же часовому поясу. - Будущий дата рождения или отсутствующие значения:проверять входные данные, чтобы избежать отрицательных возрастов или сбоев.
Быстрая проверка (без кода)
Если вам нужен быстрый результат, воспользуйтесь онлайн-калькулятором:Рассчитать возраст онлайн.
Связанные руководства
- Как рассчитать возраст (полное руководство)
- Как рассчитать возраст в Excel
- Как рассчитать возраст в JavaScript
Часто задаваемые вопросы
Почему (сегодня.год - доб.год) иногда неправильно?
Потому что он игнорирует, наступил ли уже день рождения в этом году. Перед днем рождения необходимо вычесть 1.
Должен ли я использовать дату и время для даты рождения?
Использоватьdateкогда это возможно. Дата рождения - это календарный день, и часовые пояса могут смещать дату и время в течение дня.