假设当涉及到几个月时,我正在使用相对增量。
问题是当我这样做的时候:
x = relativedelta(months=12)
x.months
> 0当我尝试这样做时,这是一个问题:
y = relativedelta(months=12) - relativedelta(months=4)
y
> relativedelta(years=+1, months=-4)
y.months
> -4 我希望月值为8 (12 - 4)。有谁知道如何最好地实现这一点,这样我就可以实现我想要的输出了?
发布于 2016-10-28 21:47:12
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)发布于 2016-10-28 20:56:40
y = (relativedelta(months=12) - relativedelta(months=4)).months % 12本质上,我使用了模数来减少越界值(<0和>12)。
https://stackoverflow.com/questions/40305345
复制相似问题