Hi, ich habe ein festes Datum, jetzt möchte ich vergleichen ob das feste Datum in Vergangenheit ist oder in Zukunft.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Das gibt mir das hier aus j n j j n j n j n n Wie wäre das richtig?
|
Anzeige
|
Datum vergleichen in Python
Gast
#4534619
Hi, ich habe ein festes Datum, jetzt möchte ich vergleichen ob das feste Datum in Vergangenheit ist oder in Zukunft.
Das gibt mir das hier aus j n j j n j n j n n Wie wäre das richtig? Du machst aus deinem String ein datetime.date-Objekt: https://docs.python.org/3.5/library/datetime.html Das kannst du dann mit datetime.date.today() vergleichen.
Gast
#4534645
date ist bei dir ein String, und du gehst zeichen für zeichen durch. Du willst aber eine Liste haben, und Element für Element durch gehen.
Gast
#4534649
Er will mit Sicherheit keine Liste haben ... Ansonsten noch so als Tip: Im Link von Lukas nach "strptime" suchen.
Gast
#4534746
Das glaube ich nicht, Tim! schrieb: > Er will mit Sicherheit keine Liste haben ... Ich denke schon, sonst macht seine for-Schleife naemlich keinen Sinn. Thomas schrieb: > Hi, > > ich habe ein festes Datum, jetzt möchte ich vergleichen ob das feste > Datum in Vergangenheit ist oder in Zukunft. > date = "01.04.2016" Na wenn das Datum fest ist, ist das doch ganz einfach: Der 01.04.2016 ist in der Vergangenheit und wird es auch immer bleiben. Also ist eine Prüfung gar nicht notwendig. Oder was genau meinst du mit "festes Datum"? > Das gibt mir das hier aus Du prüfst jedes Zeichen deines Strings einzeln gegen den kompletten String mit dem aktuellen Datum. Generell kannst du mit einem Stringvergleich das Datum nicht vergleichen - zumindest nicht in diesem Format. > Wie wäre das richtig? So wie Thomas geschrieben hat. Kaj schrieb: > date ist bei dir ein String, und du gehst zeichen für zeichen durch. > Du willst aber eine Liste haben, und Element für Element durch > gehen. > > date = ["01.04.2016"] Warum sollte er eine Liste aus einem Datum haben wollen? Kaj schrieb: > Das glaube ich nicht, Tim! schrieb: >> Er will mit Sicherheit keine Liste haben ... > Ich denke schon, sonst macht seine for-Schleife naemlich keinen Sinn. Was aber genauso gut bedeuten kann, dass er eigentlich keine for-Schleife will.
Gast
#4534759
date = "01.04.2016"
for j in date:
if j <= time.strftime("%d.%m.%Y"):
print ("j")
if j >= time.strftime("%d.%m.%Y"):
print ("n")
Falls das Datum der 01.04.2016 ist werden doch beide if-Schleifen
erfüllt oder?
Da "if j kleiner gleich..."
und "if j größer gleich..."
Da ich als ersten Treffer hier gelandet bin... die Antwort von Lukas K. (carrotindustries) vom 05.04.2016 23:18 ist die sicherste Lösung. Hier die Erklärung für das Verhalten des codes aus der Ursprungsfrage: mit for j in date : wird erreicht, dass j mit jedem Durchlauf der Schleife ein Zeichen aus date ( von links nach rechts ) enthält.
Man kann das mir einem String-Vergleich machen, muss aber dabei beachten, dass der Vergleich lexialisch also (intern Zeichen für Zeichen) von links nach rechts läuft. Das heißt, das 1. Zeichen ( links ) hat das höchste „Gewicht“ Gewünscht ist sicher, dass das Jahr das größte Gewicht hat ( also nach links damit ) Will man nach Datum sortieren geht das, wenn die Daten im Format Jahr Monat Tag ( z.B: %Y.%m.%d ) vorliegen. ( Die Trennzeichen sind optional und frei wählbar - Hauptsache einheitlich ) Ich hätte es jetzt ganz naiv ins Julianische Datum umgerechnet (sofern es sich nicht in der Bronzezeit befindet) und dann verglichen.
Wozu denn das? Zweckmäßigerweise macht man aus dem Datum einen ganzzahligen Wert (meist Unix-Zeit), mit dem sich dann sehr einfach rechnen (z.B. Differenz bilden) und vergleichen läßt.
Hat hier leider nicht geklappt.
Das ist 'ne Threadleiche, und sie wurde nur ausgegraben um zu bestätigen, dass bereits die allererste Antwort im Thread die beste war. Da muss man jetzt nicht 10 Jahre danach (ohne neue Erkenntnisse) nochmal alles von vorn aufrühren und diskutieren, was sonst noch möglich wäre.
Naja, das Julianische Datum hat den Vorteil, dass es eben nicht alle 4,29 Milliarden Sekunden überläuft, sondern linear seit dem Jahr 4712 v. Chr. kontinuierlich weitergezählt wird, ohne irgendwelche Modulo-Operationen.
Wir sind inzwischen im 64-bit-Zeitalter angekommen ...
Unix-Zeit wird genauso linear weitergezählt, und bei Verwendung von vorzeichenbehafteter Arithmetik auch beliebig weit in die Steinzeit. Daß man keine komplizierten Rechnungen braucht, ist ja gerade der Sinn der Sekundenzählung. Stop! Lest euch doch wenigstens den Thread durch. Wenn ihr wirklich denkt, dass Lukas' Vorschlag (erste Antwort überhaupt!) für die Frage ungeeignet ist, dann erklärt, warum ihr das so seht.
Ist er natürlich nicht; im Gegenteil, das Umwandeln in ein Date-Objekt sollte wohl in sämtlichen "modernen" objekt-orientierten Sprachen bzw. unter Nutzung von deren Standardbibliotheken das einfache und zuverlässige Mittel der Wahl sein. Ganz im Gegensatz zu ...
... was m.E.n. völliger Unfug ist. Selbst, wenn man keine Datums-Funktionen zur Verfügung hat : Das Datum einfach nach YYYYMMDD in eine Zahl umwandeln. Manche sagen auch Datenbankformat dazu. Also hier : 20160401 - für 01.04.2016 20260609 - für heute und dann halt mit > oder < abfragen. Eignet sich auch gut, wenn man mehrere Datums sortieren will. Danach halt wieder zurückwandeln. In Python hat man ja auch einiges : [code] from datetime import datetime, timezone api_format = datetime.now(timezone.utc).isoformat() Ausgabe: "2026-06-09T17:59:00.000+00:00"[/Code] Da kann man sich notfalls ja auch die ersten 10 Zeichen rausschneiden und die Bindestriche entfernen. :
Bearbeitet durch User
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|