如何使用relativedelta将月份转换为天数?

时间:2013-06-09 14:14:30

标签: python python-dateutil

这是我的方法

def get_remaining_days_in_financial_month(self, from_day):
    current_financial_day = date(from_day.year, from_day.month,
                                 self.financial_day_of_month)
    end_financial_month = current_financial_day + relativedelta(months=+1)
    delta = relativedelta(end_financial_month, from_day)
    remaining_days_in_financial_month = delta.days
    return remaining_days_in_financial_month

当我调试时,我看到了

current_financial_day = 2013-06-01
delta = relativedelta(months=+1)
end_financial_month = 2013-07-01
from_day = 2013-06-01
remaining_days_in_financial_month = 0

虽然这些信息是正确的,但我想知道days的数量,因为天数从2月的28变为6月的3031在八月

我怎样才能做到这一点? dateutil库没有提供它看起来的方式

谢谢

2 个答案:

答案 0 :(得分:9)

似乎对timedeltarelativedelta的含义存在一些混淆。

timedelta无上下文持续时间。可以把它想象成几微秒。当您使用datetime并向其添加timedelta时,将来会得到datetime这个微秒数,这与不同月份长度,闰年等无关。

relativedelta上下文相关持续时间。将“一个月”添加到2月1日。将“一个月”添加到8月1日。您将在每种情况下添加不同的微秒数,因为“一个月”(作为持续时间)具有不同的含义,具体取决于参考点或背景。同样的事情是在涉及闰年时添加“一年”。

添加两个timedelta实例非常有意义并且定义明确。你只需要添加两个“微秒数”。

添加两个relativedelta个实例并不是那么简单,看看文档似乎是不允许的。


所有这一切,Martijn的答案当然是正确的。我只想澄清这两个概念之间的意义差异。

答案 1 :(得分:6)

使用datetime.timedelta();只需减去两个日期:

delta = end_financial_month - from_day
return delta.days