我希望以天为单位获得 relativedelta 的总持续时间。
预期的:
dateutil.timedelta(1 month, 24 days) -> dateutil.timedelta(55 days)
我尝试了什么:
dateutil.timedelta(1 month, 24 days).days -> 24 (WRONG)
有没有一种简单的方法可以做到这一点?谢谢!
我希望以天为单位获得 relativedelta 的总持续时间。
预期的:
dateutil.timedelta(1 month, 24 days) -> dateutil.timedelta(55 days)
我尝试了什么:
dateutil.timedelta(1 month, 24 days).days -> 24 (WRONG)
有没有一种简单的方法可以做到这一点?谢谢!
这个也让我很困扰。没有一种非常干净的方法可以获取特定单元中的时间跨度。这部分是因为日期范围对单位的依赖性。
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
简单的日期差异实际上是这样做的。
>>> 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 * duration.years) + (30 * duration.months) + (duration.days)