3

这是我的方法

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,因为天数从282 月变为306 月和318 月

我怎样才能做到这一点?dateutil库似乎没有提供一种方式

谢谢

4

2 回答 2

10

似乎对于 atimedelta是什么与 a存在一些混淆relativedelta

Atimedelta上下文无关的持续时间。把它想象成一些微秒。当你取 adatetime并添加 atimedelta时,你会datetime在未来得到一个微秒数,它被定义为与不同的月份长度、闰年等无关。

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

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

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


话虽如此,Martijn 的回答当然是正确的。我只是想澄清这两个概念之间的含义差异。

于 2013-07-22T22:40:19.067 回答
7

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

delta = end_financial_month - from_day
return delta.days
于 2013-06-09T14:18:55.913 回答