relativedelta(months=12)
实际上relativedelta(years=+1)
它会自动将月转换为年。例如months=13
会导致relativedelta(years=+1, months=+1)
此外,仅当月份低于-11 或高于11 时,年份才会发生变化。因此,如果操作后的金额 months
仍在-11 和11 之间,则年份不会发生变化。
解决方案是您需要同时查看rdelta.years
和rdelta.months
值以获得您正在寻找的“净月数”。
def total_months(rdelta):
return (rdelta.years * 12) + rdelta.months
您可以子类化relativedelta
以使其更直观地供您使用。
class reldelta(relativedelta):
@property
def total_months(self):
return (self.years * 12) + self.months
然后
>>> delta = reldelta(years=1) - relativedelta(months=4)
>>> delta
reldelta(years=+1, months=-4)
>>> delta.total_months
8
当然,如果您想将天数考虑在内,这可能会变得混乱,因为一个月中的天数会发生变化。这就是为什么days
不像几个月那样有界
>>> relativedelta(days=9999)
relativedelta(days=+9999)