这是我的方法
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月的30
和31
在八月
我怎样才能做到这一点? dateutil库没有提供它看起来的方式
谢谢
答案 0 :(得分:9)
似乎对timedelta
与relativedelta
的含义存在一些混淆。
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