Seite 1 von 1
zwei Datum miteinander vergleichen
Verfasst: Montag 6. März 2017, 12:58
von powaaah
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:
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)
Re: zwei Datum miteinander vergleichen
Verfasst: Montag 6. März 2017, 13:22
von lackschuh
@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
Re: zwei Datum miteinander vergleichen
Verfasst: Montag 6. März 2017, 13:39
von Sirius3
@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)
Re: zwei Datum miteinander vergleichen
Verfasst: Montag 6. März 2017, 13:49
von powaaah
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)
Re: zwei Datum miteinander vergleichen
Verfasst: Montag 6. März 2017, 15:18
von snafu
Oder einfach das externe Modul dateutil nutzen. Dieses erkennt das vorliegende Format meist automatisch.
Re: zwei Datum miteinander vergleichen
Verfasst: Montag 6. März 2017, 21:18
von DasIch
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.