我想计算两个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.
感谢。
答案 0 :(得分:24)
如果您能够安装优秀的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'
答案 1 :(得分:10)
在python中,减去两个datetime.date
个对象会产生一个datetime.timedelta
object,其属性为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 月。
答案 2 :(得分:1)
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)