2011-08-30 26 views
36

Ho il seguente codice e sto ottenendo l'errore di cui sopra. Dal momento che sono nuovo a Python Sto avendo difficoltà a capire la sintassi qui e come posso risolvere l'errore:non può confrontare datetime.datetime a datetime.date

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

Si prega di dare qualche altro codice in modo che possiamo vedere i tipi di dati coinvolti. Molto probabilmente è necessario convertire datetime.date in datetime.datetime prima di confrontarlo. – Ber

+1

possibile duplicato di [Confronto delle date in Python] (http://stackoverflow.com/questions/3278999/comparing-dates-in-python) – NullUserException

+0

qual è la sintassi qui? e come posso convertire un datetime.datetime in datetime.date o vis versa? – locoboy

risposta

47

Esiste un metodo datetime.date() per la conversione da un datetime a una data.

per eseguire la conversione opposta, è possibile utilizzare questa funzione datetime.datetime(d.year, d.month, d.day)

+16

Per eseguire la conversione opposta, è sufficiente eseguire 'datetime.datetime (d.anno, d.month, d.giorno) ' – Steven

1

tue variabili d'inizio e la data sono di tipo diverso credo. Uno è un datetime e uno è una data. Potrebbe essere necessario mostrare più codice per ottenere un aiuto decente.

Ma guardate questo: http://docs.python.org/library/datetime.html#available-types

Ti dice che datetime.datetime ha attributi come il giorno, il mese e l'anno, proprio come datetime.date.

8

È possibile utilizzare il metodo datetime.datetime.combine per confrontare l'oggetto data per oggetto datetime, quindi confrontare l'oggetto convertito con l'altro oggetto 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 
3

inizio Supponendo è un datetime, usare in questo modo:

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

mi non credo che ci sia la necessità di convertire i data datetime in Python, come solo si può fare la di fronte e confronta.

Oppure si dispone di altri metodi per creare un nuovo datetime utilizzando la data da convertire e l'ora alle 00:00.

+0

Stavo verificando lo stesso errore comparando un' DateField' a 'datetime.now()' e l'ho risolto aggiungendo semplicemente '.date()' alla fine in questo modo: 'datetime.now(). date() 'questa è una soluzione molto buona, non troppo complicata – Catherine

1

Questo problema si verifica quando si tenta di confrontare un campo data (DateField) e un campo datetime (DateTimeField).

La soluzione dovrebbe controllare dove sono stati definiti i campi nei modelli e assicurarsi che i tipi siano uniformi.

Ti suggerisco di sostituire DateField con DateTimeField.

+0

Ho un problema correlato a questo, ho cambiato DateTimeField, e ancora ho ottenuto quell'errore. Quello che ho scoperto è che quando stavo creando l'oggetto, stavo usando una Data, invece un DateTime – anizzomc

2

È possibile convertire datetime.date-datetime.datetime costruendo quest'ultimo utilizzando del ex year, month e day attributi:

from datetime import datetime, day 

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

Grazie alla Steven per la soluzione.

Problemi correlati