dateutil.relativedelta - 如何获得持续时间?

Ema*_*gan 11 python python-dateutil relativedelta

我想以天为单位得出relativedelta的总持续时间.

预期:

dateutil.timedelta(1 month, 24 days) -> dateutil.timedelta(55 days)
Run Code Online (Sandbox Code Playgroud)

我尝试了什么:

dateutil.timedelta(1 month, 24 days).days -> 24 (WRONG)
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法吗?谢谢!

Mar*_*son 9

这个也困扰了我.没有一种非常干净的方法来获得特定单位的时间跨度.这部分是因为日期范围依赖于单位.

relativedelta()几个月来争论不休.但是当你想到一个月有多长时间时,答案是"它取决于".随着中说,这是技术上不可能到转换relativedelta()直接向天,不知道三角洲土地上天.

这就是我最终做的事情.

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
Run Code Online (Sandbox Code Playgroud)


egv*_*gvo 5

简单的日期差异实际上可以做到这一点。

    >>> from datetime import datetime
    >>> (datetime(2017, 12, 1) - datetime(2018, 1, 1)).days
    -31
Run Code Online (Sandbox Code Playgroud)

要获得正数,您可以交换日期或使用abs:

    >>> abs((datetime(2017, 12, 1) - datetime(2018, 1, 1)).days)
    31
Run Code Online (Sandbox Code Playgroud)