gpt4 book ai didi

python - datetime.date + datetime.timedelta = datetime.date 什么意思

转载 作者:行者123 更新时间:2023-11-30 23:29:50 30 4
gpt4 key购买 nike

当我运行时

from datetime import date, time, timedelta
date(2012, 11, 1) + timedelta(0, 3600)

结果是

datetime.date(2012, 11, 1)

为了获得所需的结果,我必须使用组合,即

datetime.combine(date(2012, 11, 1), time(0,30))

现在这不是什么大问题,但默默地允许将时间增量添加到日期中,然后返回日期而不是日期时间会导致一个微妙的错误,需要一段时间才能追踪到。它肯定应该返回日期时间或抛出?

编辑:我发现 dateutil.relativedelta 的行为符合我的预期,即

datetime.date(2013,1,1)+dateutil.relativedelta(minutes=1)
>>datetime.datetime(2013, 1, 1, 0, 1)

这比 datetime.combine 与 datetime.time 或将日期转换为日期时间以添加时间增量要容易得多。

最佳答案

Python 假设您足够聪明,可以在添加到 date 对象时仅使用指代整数天数的 timedelta 对象,因为您显然不这样做不关心时间部分。

加法返回与任一操作数不同的类型将会令人惊讶。您可能认为它类似于 1 + 0.5 返回 1.5,只不过结果是第二个操作数的类型。

您可能认为有一种简单的方法可以将date 转换为datetime,但事实似乎并非如此。我可以想到两种方法:

dt = datetime.combine(d, time())

dt = datetime(d.year, d.month, d.day)

转换为日期时间后,您可以轻松添加timedelta以获得您期望的结果。

附注我发现最好的策略是假装 datetime.datedatetime.time 不存在并专门使用 datetime.datetime。这样头痛就少很多。

关于python - datetime.date + datetime.timedelta = datetime.date 什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20943199/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com