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.
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.
1. Durchlauf j = "0" : "0" ist lexikalisch < "01" ( 01.04.2016 )
2. Durchlauf j = "1" : "1" ist lexikalisch > "01"
...
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 )
Marek N. schrieb:> 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.
Marek N. schrieb:> Ich hätte es jetzt ganz naiv ins Julianische Datum umgerechnet (sofern> es sich nicht in der Bronzezeit befindet) und dann verglichen.
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.
Johannes F. schrieb:> Zweckmäßigerweise macht man aus dem Datum einen> ganzzahligen Wert (meist Unix-Zeit)
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.
Marek N. schrieb:> Naja, das Julianische Datum hat den Vorteil, dass es eben nicht alle> 4,29 Milliarden Sekunden überläuft,
Wir sind inzwischen im 64-bit-Zeitalter angekommen ...
Marek N. schrieb:> sondern linear seit dem Jahr 4712 v.> Chr. kontinuierlich weitergezählt wird, ohne irgendwelche> Modulo-Operationen.
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.
Jörg W. schrieb:> Wenn ihr wirklich denkt,> dass Lukas' Vorschlag (erste Antwort überhaupt!) für die Frage> ungeeignet ist,
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 ...
Marek N. schrieb:> Ich hätte es jetzt ganz naiv ins Julianische Datum umgerechnet
... 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 :