2013-04-08 83 views
1

我有以下错误,请问有人可以解释datetime.datetime和datetime.date之间的区别吗?Python的日期时间操作

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

这是哪一种语言? – 2013-04-08 17:58:31

+0

对不起编辑,python,我从文档中获得了两个ojects的定义,但仍然在努力理解diff,这只是秒?我怎么能转换其中一个具有相同的格式? – matel 2013-04-08 18:00:40

+1

输入'help(datetime.datetime)'和'help(datetime.date)' – jurgenreza 2013-04-08 18:04:44

回答

2

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

要修正错误,您必须指定您指向的日期中的哪个点。例如,要使其指向日期开始的午夜,请将dt - d替换为dt - datetime.datetime(d.year, d.month, d.day)

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对象,这是另一个略有不同的动物 - 它不代表特定的时间点,只是两点之间的差异(即,您不能将其用作日期日期)。