python - 为什么 date + timedelta 变成日期,而不是日期时间?

标签 python datetime

在 Python 中,在混合类型数字的运算中,较窄的类型是 widened to that of the other ,如int + floatfloat:

In [57]: 3 + 0.1
Out[57]: 3.1

但是对于 datetime.date,我们有 datetime.date + datetime.timedeltadatetime.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/

相关文章:

python - 如何在 python falcon 中使用异步等待?

python - DataFrame 不会为新的 pandas 列赋值

python - 在 python 中将列重复为行?

c# - 比较access数据库中的日期

android - 判断一个时间是否在另外两个时间之间

python-2.7 - 如何识别从今天(包括今天)到过去和 future (不包括周末)的三个工作日并将它们放入 Pandas 数据框中?

python - 显示两个数据框列中两个字符串之间的差异的位置,pandas

Python 数据模型 : confused again with classmethod

python - OSError : [WinError 123] The filename, 目录名或卷标语法不正确

mysql - 选择每个项目的最大日期的所有列