рассчитать разницу между двумя датами datetime.date () в годах и месяцах

Я хочу рассчитать разницу между двумя датами datetime.date () в годах и месяцах.

Например;

d1 = date(2001,5,1) d2 = date(2012,1,1) d3 = date(2001,1,1) d4 = date(2012,5,1) diff1 = d2 - d1 diff2 = d4 - d3 

Желаемый результат:

 diff1 == 10 years & 8 months. diff2 == 11 years & 4 months. 

Благодарю.

Если вы можете установить отличный пакет dateutil , вы можете сделать это:

 >>> from dateutil import relativedelta as rdelta >>> from datetime import date >>> d1 = date(2001,5,1) >>> d2 = date(2012,1,1) >>> rd = rdelta.relativedelta(d2,d1) >>> "{0.years} years and {0.months} months".format(rd) '10 years and 8 months' 

В python вычитание двух объектов datetime.date приводит к объекту datetime.timedelta , который имеет атрибут days .

Невозможно четко определить количество дней разницы в годы и месяцы; если вы определяете год как 365 дней и месяц как 30 дней, вы можете использовать:

 years, remainder = divmod(diff1.days, 365) months = remainder // 30 

Или вы можете определить средние длины года и месяца (немного) более точно:

 avgyear = 365.2425 # pedants definition of a year length with leap years avgmonth = 365.2425/12.0 # even leap years have 12 months years, remainder = divmod(diff1.days, avgyear) years, months = int(years), int(remainder // avgmonth) 

При последнем расчете ваше второе различие составляет 11 лет и 3 месяца.

В объектах timedelta нет информации о месяцах, возможно, вам лучше всего вычислить годы и месяцы напрямую

 >>> d2.year - d1.year + (d2.month - d1.month)/12, (d2.month - d1.month)%12 (10, 8) >>> d4.year - d3.year + (d4.month - d3.month)/12, (d4.month - d3.month)%12 (11, 4)