将python datetime.timedelta转换为dateutil.relativedelta的优雅方式

Wil*_*ams 7 python datetime python-datetime python-dateutil

是否有优雅的转换relativedeltatimedelta

用例是获取用户输入ISO日期.Python isodate会返回isodate.duration.Duration或者datetime.timedelta.

我们需要的功能relativedelta(根据"datetime.timedelta"和"dateutil.relativedelta.relativedelta"之间的差异,只使用几天? - 它做得更多)所以需要将这两种类型转换为a relativedata.

Pet*_*rin 6

只需取总数secondsmicroseconds,这就是所有timedelta对象存储:

def to_relativedelta(tdelta):
    return relativedelta(seconds=int(tdelta.total_seconds()),
                         microseconds=tdelta.microseconds)

>>> to_relativedelta(timedelta(seconds=0.3))
relativedelta(microseconds=+300000)
>>> to_relativedelta(timedelta(seconds=3))
relativedelta(seconds=+3)
>>> to_relativedelta(timedelta(seconds=300))
relativedelta(minutes=+5)
>>> to_relativedelta(timedelta(seconds=3000000))
relativedelta(days=+34, hours=+17, minutes=+20)
Run Code Online (Sandbox Code Playgroud)