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
もちろん、1 か月の日数が変化するため、これに日数を加味しようとすると、これは面倒になる可能性があります。これが、days
月のように制限されていない理由です
>>> relativedelta(days=9999)
relativedelta(days=+9999)