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

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


Wie lautet die Syntax hier? und wie konvertiere ich eine datetime.datetime in datetime.date oder umgekehrt?
Locoboy


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)


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

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.


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')]

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.


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 .


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.