我有以下错误,有人可以解释一下 datetime.datetime 和 datetime.date 之间的区别吗?
TypeError: 不支持的操作数类型 -: 'datetime.datetime' 和 'datetime.date'
顾名思义,adatetime
包含有关日期和时间的信息,而 adate
只是一个日期。这就是为什么允许减去两个日期时间并返回 a timedelta
(两个瞬间之间的时间差),但减去 adatetime
和 adate
是不允许的——因为date
指的是一整天,所以不清楚你想要计算距离的那一天的哪一部分至。
要修复错误,您必须指定您指的是当天的哪一点。例如,要让它引用日期开始时的午夜,请替换dt - d
为dt - datetime.datetime(d.year, d.month, d.day)
。
date
只是一个日期(年、月、日),同时datetime
还包括一个时间(年、月、日、小时、分钟、秒、毫秒)。
不能直接比较两者,因为需要明确指定如何处理时间部分。您是完全忽略时间部分,还是在必要时选择一些任意时间进行比较(通常是午夜)?此选择取决于哪个最适合您的情况,实际上,只有您可以确定。
更具体地说,您必须将 提升date
为 adatetime
或将 降级datetime
为 a date
。作为dt
日期时间和d
日期,后者更容易一些(并且通常更有意义 - 你可以调用dt.date()
),但前者也不难(datetime.datetime(d.year, d.month, d.day)
)。
在您的代码中,它看起来像dt.date() - d
或dt - datetime.datetime(d.year, d.month, d.day)
。
请注意,这将返回一个datetime.timedelta
对象,这是另一种略有不同的动物 - 它不代表特定的时间点,仅代表两点之间的差异(即,您不能将其用作日历上的日期) .