Используя datetime
, встроенный модуль, вы можете легко получить количество дней.
>>> import datetime
>>> foo = datetime.date(2001, 8, 23) - datetime.date(1981, 6, 1)
>>> foo
datetime.timedelta(days=7388)
>>> foo.days
7388
>>> bar = datetime.date(2003, 12, 30) - datetime.date(2002, 1, 1)
>>> bar
datetime.timedelta(days=728)
>>> bar.days
728
Модуль dateutil
может указывать количество лет, но количество месяцев
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> relativedelta(datetime.date(2001, 8, 23), datetime.date(1981, 6, 1))
relativedelta(years=+20, months=+2, days=+22)
>>> relativedelta(datetime.date(2003, 12, 30), datetime.date(2002, 1, 1))
relativedelta(years=+1, months=+11, days=+29)
Будьте осторожны при использовании количества месяцев. Месяц не определяется так же, как день. 11 месяцев в предыдущем примере представляют собой сочетание шести 31-дневных месяцев, четырех 30-дневных месяцев и одного 28-дневного месяца. Таким образом, вы не можете использовать его для получения количества дней. Я рекомендую написать функцию, чтобы получить разницу в нужной форме.
import calendar
import datetime
from dateutil.relativedelta import relativedelta
def get_delta(date2, date1):
'''calculate the delta between two datetime.date objects (date2 the newer date)'''
number_of_leap_years = sum(1
for yr in range(date1.year, date2.year + 1)
if calendar.isleap(yr))
number_of_years = relativedelta(date2, date1).years
total_number_of_days = (date2 - date1).days
number_of_days = total_number_of_days
- 365 * number_of_years
- number_of_leap_years
return f'{number_of_years} years, {number_of_days} days'