首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中按月工作时的relativedelta

在python中按月工作时的relativedelta
EN

Stack Overflow用户
提问于 2016-10-28 20:40:46
回答 2查看 4.3K关注 0票数 4

假设当涉及到几个月时,我正在使用相对增量。

问题是当我这样做的时候:

代码语言:javascript
复制
x = relativedelta(months=12)
x.months
> 0

当我尝试这样做时,这是一个问题:

代码语言:javascript
复制
y = relativedelta(months=12) - relativedelta(months=4)

y
> relativedelta(years=+1, months=-4)

y.months
> -4 

我希望月值为8 (12 - 4)。有谁知道如何最好地实现这一点,这样我就可以实现我想要的输出了?

EN

回答 2

Stack Overflow用户

发布于 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.yearsrdelta.months的值,以获得您正在寻找的“净月份”。

代码语言:javascript
复制
def total_months(rdelta):
    return (rdelta.years * 12) + rdelta.months

您可以将relativedelta子类化,使其更直观地用于您的使用。

代码语言:javascript
复制
class reldelta(relativedelta):
    @property
    def total_months(self):
        return (self.years * 12) + self.months

然后

代码语言:javascript
复制
>>> delta = reldelta(years=1) - relativedelta(months=4)
>>> delta
reldelta(years=+1, months=-4)
>>> delta.total_months
8

当然,如果您想要将天数考虑在内,这可能会变得很混乱,因为一个月中的天数会发生变化。这就是为什么days不像月份那样有界。

代码语言:javascript
复制
>>> relativedelta(days=9999)
relativedelta(days=+9999)
票数 4
EN

Stack Overflow用户

发布于 2016-10-28 20:56:40

代码语言:javascript
复制
y = (relativedelta(months=12) - relativedelta(months=4)).months % 12

本质上,我使用了模数来减少越界值(<0和>12)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40305345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档