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

Python 使用relativedelta时如何将月份转换为天?,python,python-dateutil,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 + relative

这是我的方法

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
虽然这些信息是正确的,但我想知道
天数
,因为天数从2月的
28
变为6月的
30
,8月的
31

我怎样才能做到这一点?图书馆并没有提供一种看起来像这样的方式


谢谢

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

delta = end_financial_month - from_day
return delta.days

关于什么是
timedelta
relativedelta
似乎有些混淆

timedelta
是与上下文无关的持续时间。可以把它想象成若干微秒。当您获取一个
datetime
并向其添加一个
timedelta
时,您将得到一个
datetime
未来的微秒数,它的定义与不同的月长、闰年等无关

relativedelta
是一种上下文敏感的持续时间。将“一个月”添加到2月1日。将“一个月”添加到8月1日。在每种情况下,您将添加不同的微秒数,因为“一个月”(作为持续时间)根据参考点或上下文具有不同的含义。当涉及闰年时,添加“一年”也是同样的道理

添加两个
timedelta
实例非常有意义,而且定义良好。您只需添加两个“微秒数”

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



尽管如此,Martijn的回答当然是正确的。我只是想澄清这两个概念在意义上的区别。

相对延迟的关键在于相对延迟(月=+1)没有固定的天数,因为它可以添加到任何日期。因此,如果这不是你想要的,就不要使用它。我有一个用例,其中一个用户我需要计算下个月的用户财务月,并查看从其他日期剩下的天数,对于该用例,你不需要
relativedelta
,因为它会给你一个1个月的增量;你想在几天内得到一个绝对的增量。