我有以下代码,我收到上述错误。由于我是python的新手,因此我无法理解这里的语法以及如何修复错误:
if not start or date < start: start = date
答案 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.date
,datetime.datetime
和year
属性构建后者,将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