![](/img/trans.png)
[英]Django: can't compare datetime.datetime to datetime.date
[英]can't compare datetime.datetime to datetime.date
我有以下代码并收到上述错误。 由于我是 python 的新手,因此无法理解此处的语法以及如何修复错误:
if not start or date < start: start = date
有一个datetime.date()
方法可以将日期时间转换为日期。
要进行相反的转换,您可以使用此函数datetime.datetime(d.year, d.month, d.day)
您可以使用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
假设开始是一个日期时间,像这样使用它:
if not start or date < start.date(): start = date
我认为不需要在 python 中将日期转换为日期时间,因为您可以做相反的事情并进行比较。
或者,您还有其他方法可以通过使用要转换的日期和 00:00 的时间来创建新的日期时间。
但是,我在使用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')]
当您尝试比较日期字段 ( DateField
) 和日期时间字段 ( DateTimeField
) 时,会出现此问题。
解决方案是检查您在模型中定义字段的位置并确保类型是统一的。
我建议你用DateTimeField
替换所有DateField
。
我猜你的变量 start 和 date 是不同的类型。 一个是日期时间,一个是日期。 您可能需要显示更多代码才能获得体面的帮助。
但看看这个: http : //docs.python.org/library/datetime.html#available-types
它告诉您 datetime.datetime 具有诸如日、月和年之类的属性,就像 datetime.date 一样。
哇,问题和答案太旧了,需要更新。 将 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
我使用日期时间 object 解决了它。 方法如下:
date_object = datetime_object.date()
然后您可以将其与任何 datetime.date object 进行比较。 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.