无法将datetime.datetime与datetime.date进行比较


79

我有以下代码,并收到上述错误。由于我是python的新手,因此无法理解这里的语法以及如何解决错误:

if not start or date < start: start = date

1
请提供更多代码,以便我们查看所涉及的数据类型。最有可能需要在比较之前将datetime.date转换为datetime.datetime。
小檗碱


这里的语法是什么?以及如何将datetime.datetime转换为datetime.date或反之亦然?
locoboy


2
我认为python抛出这样的异常是很愚蠢的-为什么不应该允许将datetime与date进行比较?
tobixen

Answers:


110

有一种datetime.date()从日期时间转换为日期的方法。

要进行相反的转换,可以使用此功能 datetime.datetime(d.year, d.month, d.day)


24
要进行相反的转换,您可以做datetime.datetime(d.year, d.month, d.day)
史蒂文

日期(datetime.date)
juankysmith

13

您可以使用该datetime.datetime.combine方法将日期对象与datetime对象进行比较,然后将转换后的对象与另一个datetime对象进行比较。

import datetime

dt1 = datetime.datetime(2011, 03, 03, 11, 12)
day = datetime.date(2011, 03, 02)
dt2 = datetime.datetime.combine(day, datetime.time(0, 0))

print dt1 > dt2

9

假设开始是一个日期时间,请像这样使用它:

if not start or date < start.date(): start = date

认为没有必要在python中将日期转换为日期时间,因为您可以做相反的操作并进行比较。

否则,您还有其他方法可以通过使用要转换的日期和00:00的时间来创建新的日期时间。


3
我在与DateFieldto进行比较时遇到了相同的错误datetime.now(),我只是.date()在结尾处添加了这样的内容,就这样datetime.now().date()解决了这个问题:这是一个非常不错的方法,并且没有过于复杂的解决方案
Catherine

2

我在使用时收到上述错误pandas,因为这date_column是我浪费了大量时间的字符串,却没有意识到我正在格式化错误的内容:

# didnt work
df[(df.date_column > parse_datestr('2018-01-01'))]

# works
df['date_column'] = pd.to_datetime(df['date_column'])
df[(df.date_column > '2018-01-01') & (df.date_column < '2018-02-28')]


1

当您尝试比较日期字段(DateField)和日期时间字段(DateTimeField

解决方案是检查您在模型中定义字段的位置,并确保类型统一。

我建议您将全部替换DateFieldDateTimeField


我有一个与此相关的问题,我更改为DateTimeField,但仍然收到该错误。我发现,当我创建对象时,我使用的是日期,而不是日期时间
anizzomc 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.