datetime.datetime kann nicht mit datetime.date verglichen werden

78

Ich habe den folgenden Code und erhalte den obigen Fehler. Da ich neu in Python bin, habe ich Probleme, die Syntax hier zu verstehen und wie ich den Fehler beheben kann:

if not start or date < start: start = date
locoboy
quelle
1
Bitte geben Sie etwas mehr Code an, damit wir die beteiligten Datentypen sehen können. Höchstwahrscheinlich müssen Sie datetime.date vor dem Vergleich in datetime.datetime konvertieren.
Ber
1
Mögliches Duplikat des Vergleichens von Daten in Python
NullUserException
Wie lautet die Syntax hier? und wie konvertiere ich eine datetime.datetime in datetime.date oder umgekehrt?
Locoboy
Dies scheint ein Duplikat von stackoverflow.com/questions/3278999/… zu sein
tobixen
2
Ich finde es albern, dass Python eine solche Ausnahme auslöst - warum sollte man nicht eine Datums- und Uhrzeitangabe mit einem Datum vergleichen dürfen?
Tobixen

Antworten:

110

Es gibt eine datetime.date()Methode zum Konvertieren von Datum / Uhrzeit in Datum.

Um die entgegengesetzte Konvertierung durchzuführen, können Sie diese Funktion verwenden datetime.datetime(d.year, d.month, d.day)

Juankysmith
quelle
24
Um das Gegenteil zu tun, könnten Sie einfach tundatetime.datetime(d.year, d.month, d.day)
Steven
das Datum (datetime.date)
Juankysmith
12

Mit dieser datetime.datetime.combineMethode können Sie das Datumsobjekt mit dem Datum / Uhrzeit-Objekt vergleichen und dann das konvertierte Objekt mit dem anderen Datum / Uhrzeit-Objekt vergleichen.

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
Imran
quelle
9

Angenommen, der Start ist eine Datums- / Uhrzeitangabe. Verwenden Sie diese wie folgt:

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

Ich glaube nicht, dass es in Python notwendig ist, Datum in Datum / Uhrzeit umzuwandeln , da Sie einfach das Gegenteil tun und vergleichen können.

Oder Sie haben andere Methoden, um eine neue Datums- und Uhrzeitangabe zu erstellen, indem Sie das Datum für die Konvertierung und die Uhrzeit um 00:00 Uhr verwenden.

Sahil Kalra
quelle
3
Ich hatte den gleichen Fehler beim Vergleich von a DateFieldmit datetime.now()und habe ihn behoben, indem ich einfach wie folgt .date()zum Ende hinzugefügt habe: datetime.now().date()Dies ist eine sehr gute, nicht überkomplizierte Lösung
Catherine
2

Ich habe jedoch den obigen Fehler während der Verwendung erhalten pandas, da dies die date_columnZeichenfolge war, die ich viel Zeit verschwendet habe, ohne zu bemerken, dass ich das Falsche formatiert habe:

# 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')]
jmunsch
quelle
1

Ihre Variablen Start und Datum sind von unterschiedlichem Typ, denke ich. Eins ist eine Datumszeit und eins ist ein Datum. Möglicherweise müssen Sie mehr Code anzeigen, um angemessene Hilfe zu erhalten.

Aber sehen Sie sich das an: http://docs.python.org/library/datetime.html#available-types

Es zeigt Ihnen, dass datetime.datetime Attribute wie Tag, Monat und Jahr hat, genau wie datetime.date.

naeg
quelle
1

Dieses Problem tritt auf, wenn Sie versuchen, ein Datumsfeld ( DateField) und ein Datum / Uhrzeit-Feld ( DateTimeField) zu vergleichen.

Die Lösung wäre zu überprüfen, wo Sie die Felder in Ihren Modellen definiert haben, und sicherzustellen, dass die Typen einheitlich sind.

Ich würde vorschlagen, dass Sie alle DateFielddurch ersetzenDateTimeField .

Kindson Munonye Kany
quelle
Ich habe ein Problem damit, ich habe zu DateTimeField gewechselt und trotzdem habe ich diesen Fehler erhalten. Was ich herausgefunden habe ist, dass ich beim Erstellen des Objekts ein Datum anstelle einer DateTime verwendet habe
anizzomc