我有以下错误,有人可以解释datetime.datetime和datetime.date之间的区别吗?
TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'datetime.date'
答案 0 :(得分:2)
顾名思义,datetime
包含有关日期和时间的信息,而date
只是一个日期。这就是为什么允许减去两个日期时间并返回timedelta
(两个时刻之间的时差),但减去datetime
和date
不是 - 因为date
指的是一整天,目前还不清楚那天你想要计算距离的哪一部分。
要修复错误,您必须指定您所引用的日期中的哪一个点。例如,要让它引用日期开头的午夜,请将dt - d
替换为dt - datetime.datetime(d.year, d.month, d.day)
。
答案 1 :(得分:1)
date
只是一个日期(年,月,日),而datetime
还包括一个时间(年,月,日,小时,分钟,秒,毫秒)。
你无法直接比较两者,因为你需要明确指定如何处理时间部分。你是否完全忽略了时间部分,或者你是否选择了一些任意时间与必要时(通常是午夜)进行比较?这个选择取决于哪种情况最适合您的情况,实际上,只有您可以确定。
更具体地说,您必须将date
提升为datetime
,或将datetime
降级为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
对象,这是另一个略有不同的动物 - 它不代表特定的时间点,只是两点之间的差异(即,你不能使用它作为日历上的日期)。