计算两个datetime.date()日期之间的差异,以年和月为单位

Tom*_*Fin 7 python date timedelta

我想计算两个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
Run Code Online (Sandbox Code Playgroud)

期望的结果:

diff1 == 10 years & 8 months. 
diff2 == 11 years & 4 months.
Run Code Online (Sandbox Code Playgroud)

谢谢.

Bur*_*lid 25

如果您能够安装优秀的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'
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 10

在python中,减去两个datetime.date对象会产生一个具有属性的datetime.timedelta对象days.

将差异天数转换为年和月并没有明确规定; 如果您将一年定义为365天,将一个月定义为30天,则可以使用:

years, remainder = divmod(diff1.days, 365)
months = remainder // 30
Run Code Online (Sandbox Code Playgroud)

或者,您可以定义平均年和月长度(稍微)更准确:

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)
Run Code Online (Sandbox Code Playgroud)

通过后者计算,您的第二个差异为11年零3个月.