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

时间:2011-08-30 06:08:15

标签: python

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

if not start or date < start: start = date

8 个答案:

答案 0 :(得分:71)

有一种datetime.date()方法可以将日期时间转换为日期。

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

答案 1 :(得分:9)

您可以使用datetime.datetime.combine方法将日期对象与日期时间对象进行比较,然后将转换后的对象与其他日期时间对象进行比较。

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

答案 2 :(得分:6)

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

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

认为不需要在python中将日期转换为日期时间,因为您可以反而进行比较。

或者您还有其他方法可以使用转换日期和00:00时间来创建新的日期时间。

答案 3 :(得分:4)

您可以使用以前的datetime.datedatetime.datetimeyear属性构建后者,将month转换为day

from datetime import datetime, date

d = date(2000, 12, 31)
dt = datetime(d.year, d.month, d.day)

感谢Steven解决方案。

答案 4 :(得分:1)

我猜你的变量开始和日期是不同的类型。一个是日期时间,一个是日期。您可能需要显示更多代码才能获得合适的帮助。

但请看一下:http://docs.python.org/library/datetime.html#available-types

它告诉您datetime.datetime具有日,月和年等属性,就像datetime.date一样。

答案 5 :(得分:1)

当您尝试比较日期字段(DateField)和日期时间字段(DateTimeField)时会出现此问题。

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

我建议你DateField 替换所有DateTimeField

答案 6 :(得分:1)

我在使用 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')]

答案 7 :(得分:0)

哇,问题和答案太旧了,需要更新。将 datetime.datetime 对象转换为 datetime.date 对象很简单:

somestringtext = '7.04.2021'
datetime_datetime_object = datetime.strptime(somestringtext, '%d.%m.%Y')
### returns datetime.datetime(2021, 4, 7, 0, 0)
datetime_date_object = datetime.date(datetime_datetime_object)

而且 datetime 对象和 date 对象不一样,你无法比较

datetime_datetime_object == datetime_date_object
### returns False

除非您将它们转换为相同的格式:

datetime.date(datetime_datetime_object) == datetime_date_object
### returns True