python datetime操作

时间:2013-04-08 17:57:23

标签: python datetime

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

TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'datetime.date'

2 个答案:

答案 0 :(得分:2)

顾名思义,datetime包含有关日期和时间的信息,而date只是一个日期。这就是为什么允许减去两个日期时间并返回timedelta(两个时刻之间的时差),但减去datetimedate不是 - 因为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() - ddt - datetime.datetime(d.year, d.month, d.day)

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