Python dateutil.relativedelta-如何获取以天为单位的持续时间?

Python dateutil.relativedelta-如何获取以天为单位的持续时间?,python,python-dateutil,relativedelta,Python,Python Dateutil,Relativedelta,我希望以天为单位得到一个相对LTA的总持续时间 预期: dateutil.timedelta(1 month, 24 days) -> dateutil.timedelta(55 days) 我尝试的是: dateutil.timedelta(1 month, 24 days).days -> 24 (WRONG) 有没有一个简单的方法可以做到这一点?谢谢 这件事也困扰着我。没有一种非常干净的方法可以获得特定单元中的时间跨度。这部分是因为日期范围依赖于单位 relativedel

我希望以天为单位得到一个相对LTA的总持续时间

预期:

dateutil.timedelta(1 month, 24 days) -> dateutil.timedelta(55 days)
我尝试的是:

dateutil.timedelta(1 month, 24 days).days -> 24 (WRONG)

有没有一个简单的方法可以做到这一点?谢谢

这件事也困扰着我。没有一种非常干净的方法可以获得特定单元中的时间跨度。这部分是因为日期范围依赖于单位

relativedelta()
接受一个参数长达数月。但当你想到一个月有多长时,答案是“视情况而定”。话虽如此,在不知道增量落在哪天的情况下,将
relativedelta()
直接转换为天在技术上是不可能的

这就是我最后要做的

从datetime导入datetime,timedelta
从dateutil.relativedelta导入relativedelta
rd=相对寿命(年=3,月=7,天=19)
#我使用“now”,但您可能需要根据一组特定的日期调整开始和结束范围。
now=datetime.now()
#计算与相对LTA跨度的日期差
然后=现在-rd
#与正常的timedelta不同,“then”作为datetime返回
#减去两个日期将得到一个包含所需值的timedelta
diff=现在-然后
打印差异天数

简单的日期差异实际上就是这样

    >>> from datetime import datetime
    >>> (datetime(2017, 12, 1) - datetime(2018, 1, 1)).days
    -31
要获得正数,您可以交换日期或使用abs:

    >>> abs((datetime(2017, 12, 1) - datetime(2018, 1, 1)).days)
    31

在许多情况下,您有一个非常受限的relativedelta,在我的情况下,我的relativedelta只设置了相对字段(年、月、周和天),没有其他字段。你也许能用这个简单的方法逃脱惩罚

这肯定是关闭了几天,但它可能是所有你需要的

(365*工期.年)+(30*工期.月)+(工期.天)

dateutil没有
relativedelta
也没有
timedelta
至少没有我使用的版本,因此我不理解你的问题
datetime。timedelta
.days
属性…我正在使用它
.days
将只返回不包括月份的天数(参见我的示例)。由于不同的月份和年份具有不同的天数,因此似乎不太可能从timedelta中提取总时间(以天为单位)。即,天数取决于相对月份和年份(timedelta无法获得信息)。