首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用relativedelta时,如何将月转换为天?

当使用relativedelta时,如何将月转换为天?
EN

Stack Overflow用户
提问于 2013-06-09 22:14:30
回答 2查看 4.1K关注 0票数 3

下面是我的方法

代码语言:javascript
复制
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

当我调试时,我看到

代码语言:javascript
复制
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和8月份的31

我如何才能做到这一点?dateutil库似乎并没有提供一种

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-09 22:18:56

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

代码语言:javascript
复制
delta = end_financial_month - from_day
return delta.days
票数 7
EN

Stack Overflow用户

发布于 2013-07-23 06:40:19

对于什么是timedeltarelativedelta,似乎存在一些混淆。

timedelta上下文无关的持续时间。可以把它想象成微秒的数字。当你把一个datetime加到一个timedelta上时,你得到了一个未来的微秒数的datetime,它的定义与不同的月份长度、闰年等无关。

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

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

添加两个relativedelta实例并不是那么简单,而且在文档中看起来是不允许的。

话虽如此,Martijn的答案当然是正确的。我只是想澄清这两个概念在含义上的区别。

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

https://stackoverflow.com/questions/17010510

复制
相关文章

相似问题

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