python - lenguaje - no se puede comparar datetime.datetime a datetime.date
python tutorial (7)
Este problema surge cuando intenta comparar un campo de fecha ( DateField
) y un campo de fecha y hora ( DateTimeField
).
La solución sería verificar dónde definió los campos en sus modelos y asegurarse de que los tipos sean uniformes.
Sugeriría que reemplaces todo DateField
con DateTimeField
.
Tengo el siguiente código y estoy obteniendo el error anterior. Como soy nuevo en Python, tengo problemas para entender la sintaxis aquí y cómo puedo solucionar el error:
if not start or date < start: start = date
Hay un método datetime.date()
para convertir de una fecha a una fecha.
Para hacer la conversión opuesta, puede usar esta función datetime.datetime(d.year, d.month, d.day)
Puede convertir datetime.date
a datetime.datetime
construyendo este último utilizando los atributos de year
, month
y day
del antiguo:
from datetime import datetime, day
d = day(2000, 12, 31)
dt = datetime(d.year, d.month, d.day)
Gracias a Steven por la solución.
Puede usar el método datetime.datetime.combine
para comparar el objeto date con el objeto datetime, luego compare el objeto convertido con el otro objeto 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
Recibí el error anterior al usar pandas
, sin embargo, porque date_column
era la cadena que perdí mucho tiempo sin darme cuenta de que estaba formateando lo incorrecto:
# 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'')]
Suponiendo que el inicio es una fecha y hora, úsala así:
if not start or date < start.date(): start = date
No creo que haya necesidad de convertir la fecha en datetime en Python, ya que puedes hacer lo opuesto y comparar.
O bien, tiene otros métodos para crear una nueva fecha y hora utilizando la fecha para convertir y la hora a las 00:00.
Sus variables de inicio y fecha son de tipo diferente, supongo. Uno es un horario y uno es una fecha. Es posible que deba mostrar más código para obtener ayuda decente.
Pero mira esto: http://docs.python.org/library/datetime.html#available-types
Le dice que datetime.datetime tiene atributos como día, mes y año, al igual que datetime.date.