几个月工作时python中的relativedelta

时间:2016-10-28 12:40:46

标签: python relativedelta

假设我在几个月时使用相对delta。

问题出在我做的时候:

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)。任何人都知道如何最好地接近这一点,以便我可以实现我想要的输出?

2 个答案:

答案 0 :(得分:1)

relativedelta(months=12)实际上是relativedelta(years=+1)它会自动将月数转换为年。例如,months=13会产生relativedelta(years=+1, months=+1)

此外,年份只会在月份低于-11或高于11时发生变化。因此,如果手术后months的数量仍在-11到11之间,则年份不会改变。

解决方案是,您需要同时查看rdelta.yearsrdelta.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)

答案 1 :(得分:0)

y = (relativedelta(months=12) - relativedelta(months=4)).months % 12

基本上,我使用modulo来减轻越界值(< 0和> 12)。