如何将 dateutil.relativedelta 对象转换为 datetime.timedelta 对象?

Rob*_*ark 2 python datetime timedelta relative-date python-dateutil

如何将 dateutil.relativedelta 对象转换为 datetime.timedelta 对象?

例如,

# pip install python-dateutil

from dateutil.relativedelta import relativedelta
from datetime import timedelta

rel_delta = relativedelta(months=-2)
# How can I convert rel_delta to a timedelta object so that I can call total_seconds() ?
time_delta = ???(rel_delta)  
time_delta.total_seconds()  # call the timedelta.total_seconds() method
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 5

你不能,有一个很大的原因:它们不存储相同的信息。 datetime.timedelta只存储天、秒和毫秒,而dateutil.relativedelta存储馈送给它的每个时间组件

dateutil.relativedelta对于存储诸如 1 个月之类的差异很重要,但由于一个月的长度可能会有所不同,这意味着根本无法在datetime.timedelta.


Ben*_*Ben 5

如果有人想要将特定日期的relativedeltaa 转换为 a ,只需添加和减去已知时间:timedelta

utcnow = datetime.utcnow()
rel_delta = relativedelta(months=-2)
time_delta = utcnow + rel_delta - utcnow  # e.g, datetime.timedelta(days=-62)
Run Code Online (Sandbox Code Playgroud)

正如评论者指出的那样,结果timedelta值会根据月份的不同而有所不同。

  • 这没有明确的定义。将“datetime.utcnow()”分别替换为“datetime(2000, 1, 1)”、“datetime(2000, 2, 1)”和“datetime(2000, 3, 1)”,您将得到三个不同的答案。 (2认同)