2011-08-30 9 views
36

Tengo el siguiente código y estoy recibiendo el error anterior. Ya que soy nuevo a Python que estoy teniendo problemas para entender la sintaxis aquí y cómo puedo solucionar el error:no se puede comparar datetime.datetime a datetime.date

if not start or date < start: start = date 
+0

Proporcione más código para que podamos ver los tipos de datos involucrados. Lo más probable es que necesite convertir datetime.date a datetime.datetime antes de comparar. – Ber

+1

posible duplicado de [Comparación de fechas en Python] (http://stackoverflow.com/questions/3278999/comparing-dates-in-python) – NullUserException

+0

¿cuál es la sintaxis aquí? y ¿cómo convierto un datetime.datetime a datetime.date o viceversa? – locoboy

Respuesta

47

Hay un método datetime.date() para convertir de una fecha y hora a una fecha.

para hacer la conversión opuesta, se puede usar esta función datetime.datetime(d.year, d.month, d.day)

+16

Para hacer la conversión opuesta, puede hacer 'datetime.datetime (d.year, d.month, d.día) ' – Steven

1

sus variables de inicio y la fecha son de diferente tipo, 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

Te dice que datetime.datetime tiene atributos como el día, mes y año, al igual que datetime.date.

8

Usted puede utilizar el método datetime.datetime.combine para comparar el objeto de fecha al objeto de fecha y hora, y luego comparar el objeto convertido con el otro objeto de fecha y hora.

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 
3

Suponiendo inicio es una fecha y hora, utilizar de esta manera:

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

I no creo que hay una necesidad de convertir la fecha a fecha y hora en Python, ya que sólo puede hacer lo opuesto y comparar.

O bien, tiene otros métodos para crear una nueva fecha y hora usando la fecha para convertir y la hora a las 00:00.

+0

Estaba teniendo el mismo error al comparar un' DateField' con 'datetime.now()' y lo arreglé simplemente agregando '.date()' al final así: 'datetime.now(). date() 'esta es una solución muy buena, no demasiado complicada – Catherine

1

Este problema se produce cuando intenta comparar un campo de fecha (DateField) y un campo de fecha y hora (DateTimeField).

La solución sería controlar dónde definió los campos en sus modelos y asegurarse de que los tipos sean uniformes.

Sugeriría que reemplace todos DateField con DateTimeField.

+0

Tengo un problema relacionado con eso, cambié a DateTimeField, y todavía tengo ese error. Lo que descubrí es que cuando estaba creando el objeto, estaba usando una fecha, en cambio un DateTime – anizzomc

2

Puede convertir datetime.date a datetime.datetime mediante la construcción de este último utilizando el ex year, month y day atributos:

from datetime import datetime, day 

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

Gracias a Steven para la solución.

Cuestiones relacionadas