转换python的优雅方式日期时间。时间增量到日期util.relative

2024-05-11 18:10:10 发布

您现在位置:Python中文网/ 问答频道 /正文

relativedelta和{}之间是否存在一个优雅的was转换?在

用例是获取用户输入的ISO日期。Python的isodate将返回isodate.duration.Duration或{}。在

我们需要relativedelta(per What is the difference between "datetime.timedelta" and "dateutil.relativedelta.relativedelta" when working only with days?——它做得更多)的特性,所以需要将这两种类型都转换为relativedata。在


Tags: the用户datetimeisisobetween用例what
3条回答

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)
d = datetime.timedelta(...)
dateutil.relativedelta.relativedelta(seconds=d.total_seconds())

在relativedelta中直接使用seconds不会填充月份和年份字段,当然,我们不知道它是闰年还是有31天的月份。在

所以像这样:

[In]:  tdelta = datetime.now() - datetime(1971, 1, 1)
[In]:  relativedelta(seconds=tdelta.total_seconds())
[Out]: relativedelta(days=+16958, hours=+13, minutes=+19, seconds=+49)

给出相对的delta,有很多天而没有几个月。虽然这在某些情况下是可以的,但在某些情况下,我们可能需要数年或数月的时间。因此:

^{pr2}$

这可能不是一个非常Python式的解决方案,但它是有效的。在

注意:这假设一年有365天(忽略闰年和非闰年),月份有30天。在

相关问题 更多 >