在 Python 中,在混合类型数字的运算中,较窄的类型是 widened to that of the other ,如int
+ float
→ float
:
In [57]: 3 + 0.1
Out[57]: 3.1
但是对于 datetime.date
,我们有 datetime.date
+ datetime.timedelta
→ datetime.date
, 不是 datetime.datetime
:
In [58]: datetime.date(2013, 1, 1) + datetime.timedelta(seconds=42)
Out[58]: datetime.date(2013, 1, 1)
为什么拓宽推理适用于数字,而不适用于date
/datetime
/timedelta
?
(背景:我正在为一种文件格式编写一个读取例程,其中一个字段是年份,一个字段是一年中的一天,一个字段是毫秒-自午夜以来。当然,简单而明确的解决方案是datetime.datetime(2013, 1, 1, 0, 0, 0) + datetime.timedelta(seconds=42)
,但同样可以认为应该重写 3 + 0.1
as 3.0 + 0.1
)
最佳答案
timedelta
对象不存储有关它是否仅涉及日期或时间的任何信息。 (小时/分钟/秒/微秒数为0的事实可能只是巧合!)
因此,假设我们有人只想操纵日期而忽略时间,她会执行 my_new_date = my_old_date + timedelta(days=1)
之类的操作。当她发现 my_new_date
现在是 datetime
对象而不是 date
对象时,她会感到非常惊讶和恼火。
关于python - 为什么 date + timedelta 变成日期,而不是日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37165952/