zwei Datum miteinander vergleichen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
powaaah
User
Beiträge: 19
Registriert: Samstag 24. Oktober 2015, 12:42

Hallo,

ich versuche seit einer Weile einen Datum-Vergleich zu erstellen. Ein exakter Vergleich mit == funktioniert einwandfrei. Nun wollte ich jedoch auch die Möglichkeit implementieren, dass ein älteres Datum erkannt werden soll. Leider funktionier das Ergebnis nicht so wie erhofft und ich weiß nicht woran es liegt.

Ergebnis:
Bild

Code: Alles auswählen

from time import *

lt = localtime()
datum_aktuell = strftime("%d.%m.%Y",lt)

datum_vergleich_liste = ["05.03.2017","05.03.2016","01.01.2000","05.04.2017","12.01.2013","27.02.2017","09.12.2017","05.03.2018","23.06.2017","09.07.2018","06.03.2020","06.03.2017","20.05.2019", ]


for i in datum_vergleich_liste:
    i = strptime(i, "%d.%m.%Y")
 
    datum_vergleich = strftime("%d.%m.%Y",i)
    print(datum_vergleich," < ", datum_aktuell, datum_vergleich < datum_aktuell)
Zuletzt geändert von Anonymous am Montag 6. März 2017, 14:49, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

@powaaah
Für so etwas verwendet man das datetime Modul und vergleicht dann die datetime Objekte miteinander.
https://docs.python.org/2/library/datetime.html
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@powaaah: Du vergleichst zwei Strings, d.h. zeichenweise und da kommt eben der 3. eines Monates vor jedem 7. eines anderen Monats, egal welches Jahr.

Code: Alles auswählen

from datetime import datetime as DateTime

datum_aktuell = DateTime.now()

datum_vergleich_liste = ["05.03.2017","05.03.2016","01.01.2000","05.04.2017","12.01.2013","27.02.2017","09.12.2017","05.03.2018","23.06.2017","09.07.2018","06.03.2020","06.03.2017","20.05.2019", ]

for datum in datum_vergleich_liste:
    datum_vergleich = DateTime.strptime(datum, "%d.%m.%Y")
    print(datum_vergleich," < ", datum_aktuell, datum_vergleich < datum_aktuell)
powaaah
User
Beiträge: 19
Registriert: Samstag 24. Oktober 2015, 12:42

Vielen Dank. Ich hatte gedacht, dass man mit strptime() in der Lage ist ein String in ein Datumsformat umzuwandeln und habe danach versucht mit strftime(), die beiden Werte in eine "schöne Form" wie Tag, Monat, Jahr umzuwandeln. Das war dann wohl der Kernfehler gewesen, da strftime() alles wieder in einen String verwandelt.
Sirius3 hat geschrieben:@powaaah: Du vergleichst zwei Strings, d.h. zeichenweise und da kommt eben der 3. eines Monates vor jedem 7. eines anderen Monats, egal welches Jahr.

Code: Alles auswählen

from datetime import datetime as DateTime

datum_aktuell = DateTime.now()

datum_vergleich_liste = ["05.03.2017","05.03.2016","01.01.2000","05.04.2017","12.01.2013","27.02.2017","09.12.2017","05.03.2018","23.06.2017","09.07.2018","06.03.2020","06.03.2017","20.05.2019", ]

for datum in datum_vergleich_liste:
    datum_vergleich = DateTime.strptime(datum, "%d.%m.%Y")
    print(datum_vergleich," < ", datum_aktuell, datum_vergleich < datum_aktuell)
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Oder einfach das externe Modul dateutil nutzen. Dieses erkennt das vorliegende Format meist automatisch.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

snafu hat geschrieben:Oder einfach das externe Modul dateutil nutzen. Dieses erkennt das vorliegende Format meist automatisch.
dateutil erkennt das Format allerdings auch gerne mal nicht und produziert dann fehlerhafte Objekte statt Exceptions. Ich würde daher empfehlen dateutil zu vermeiden sofern man kann.
Antworten