14

我希望以天为单位获得 relativedelta 的总持续时间。

预期的:

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

我尝试了什么:

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

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

4

3 回答 3

14

这个也让我很困扰。没有一种非常干净的方法可以获取特定单元中的时间跨度。这部分是因为日期范围对单位的依赖性。

relativedelta()争论了几个月。但是当您考虑一个月有多长时,答案是“视情况而定”。relativedelta()话虽如此,在不知道三角洲落在几天的情况下,直接将 a 转换为天在技术上是不可能的。

这就是我最终要做的。

from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta

rd = relativedelta(years=3, months=7, days=19)
# I use 'now', but you may want to adjust your start and end range to a specific set of dates.
now = datetime.now()

# calculate the date difference from the relativedelta span
then = now - rd
# unlike normal timedelta 'then' is returned as a datetime
# subtracting two dates will give you a timedelta which contains the value you're looking for
diff = now - then

print diff.days
于 2017-04-20T13:34:35.463 回答
2

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

    >>> 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
于 2018-01-15T11:32:53.463 回答
-1

在许多情况下,relativedelta 受到很大限制,在我的情况下,我的 relativedelta 只设置了相对字段(年、月、周和天),没有其他字段。你也许可以用简单的方法逃脱。

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

(365 * duration.years) + (30 * duration.months) + (duration.days)

于 2018-08-21T11:28:07.700 回答