relativelta在python上工作了几个月



假设我使用的是相对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(。有人知道如何最好地解决这个问题,这样我就可以实现我想要的输出吗?

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)
y = (relativedelta(months=12) - relativedelta(months=4)).months % 12

从本质上讲,我使用了模来减轻越界值(<0和>12(。

相关内容

  • 没有找到相关文章

最新更新