繁体   English   中英

无法将 datetime.datetime 与 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM