1

我有以下错误,有人可以解释一下 datetime.datetime 和 datetime.date 之间的区别吗?

TypeError: 不支持的操作数类型 -: 'datetime.datetime' 和 'datetime.date'
4

2 回答 2

2

顾名思义,adatetime包含有关日期和时间的信息,而 adate只是一个日期。这就是为什么允许减去两个日期时间并返回 a timedelta(两个瞬间之间的时间差),但减去 adatetime和 adate是不允许的——因为date指的是一整天,所以不清楚你想要计算距离的那一天的哪一部分至。

要修复错误,您必须指定您指的是当天的哪一点。例如,要让它引用日期开始时的午夜,请替换dt - ddt - datetime.datetime(d.year, d.month, d.day)

于 2013-04-08T18:01:56.007 回答
1

date只是一个日期(年、月、日),同时datetime还包括一个时间(年、月、日、小时、分钟、秒、毫秒)。

不能直接比较两者,因为需要明确指定如何处理时间部分。您是完全忽略时间部分,还是在必要时选择一些任意时间进行比较(通常是午夜)?此选择取决于哪个最适合您的情况,实际上,只有您可以确定。

更具体地说,您必须将 提升date为 adatetime或将 降级datetime为 a date。作为dt日期时间和d日期,后者更容易一些(并且通常更有意义 - 你可以调用dt.date()),但前者也不难(datetime.datetime(d.year, d.month, d.day))。

在您的代码中,它看起来像dt.date() - ddt - datetime.datetime(d.year, d.month, d.day)

请注意,这将返回一个datetime.timedelta对象,这是另一种略有不同的动物 - 它不代表特定的时间点,仅代表两点之间的差异(即,您不能将其用作日历上的日期) .

于 2013-04-08T18:12:15.297 回答