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:
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.
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)
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.
Angenommen, der Start ist eine Datums- / Uhrzeitangabe. Verwenden Sie diese wie folgt:
ifnot 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.
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')]
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.
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
Antworten:
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)
quelle
datetime.datetime(d.year, d.month, d.day)
Mit dieser
datetime.datetime.combine
Methode 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
quelle
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.
quelle
DateField
mitdatetime.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ösungIch habe jedoch den obigen Fehler während der Verwendung erhalten
pandas
, da dies diedate_column
Zeichenfolge 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')]
quelle
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.
quelle
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
DateField
durch ersetzenDateTimeField
.quelle