Datumsdifferenz programieren



  • Hallo,
    ich möchte mir gerne mit VB ein Programm schreiben, was die Datumsdifferenz zwischen 2 Datumsangaben in Jahren, Monaten, Tagen ausgibt.

    Das, was ich bislang im Netz gefunden habe bzw. z.B. die Funktionen bei Excel funktionieren nicht richtig.

    Kann mir jemand sagen, ob es irgendwo im Netz einen funktionierenden Code bereits gibt oder alternativ ob man irgendwo die dazu benötigten Algorithmen nachlesen kann.


  • Mod

    Datumsdifferenz schrieb:

    ob man irgendwo die dazu benötigten Algorithmen nachlesen kann.

    Faustregel: Du willst niemals selber Code für Datumsverarbeitung schreiben. Das geht nur schief.

    Nimm die fertigen Funktionen aus den Datumsbibliotheken der von dir genutzten Programmiersprache.

    Das, was ich bislang im Netz gefunden habe bzw. z.B. die Funktionen bei Excel funktionieren nicht richtig.

    Das ist ja schön für dich. Da kann man ja absolut nachvollziehen, was du falsch gemacht hast.



  • Hi,

    Die Differenz in Tagen ergibt sich enfach aus dem ganzzahligen Anteil der Differenz der beiden Werte. Letztlich ist ein DateTime nur eine Gleitkommazahl.
    Sieht auf den ersten Blick einfach aus.
    Aber was ist, wenn den wert von 21:30 und 23:30 (gleicher Tag) aus einer anderen Zeitzohne betrachtest. Da liegt der Wert auf zwei Tage verteilt.
    Wie ist das mit den unterschiedlichen Monatslängen (27,28,30,31 Tage). Zählst Du jetzt die wirklichen Monate oder nimmst Du 365,25/12 als Maß.
    Zwischen dem 31.12. 24:00 Uhr und dem 1.1. 0:0 Uhr liegt für den einen ein Jahr und für den anderen überhaupt keine Zeit.

    Das einzige, was Du machen kannst, ist beide Werte duerch die entsprechenden Funktionen in Jahr, Monat und Tag aufzugliedern und dann die 3 Werte separat zu subtrahieren.

    Gruß Mümmel



  • weg wegen versehentlich zitieren statt editieren



  • muemmel schrieb:

    Aber was ist, wenn den wert von 21:30 und 23:30 (gleicher Tag) aus einer anderen Zeitzohne betrachtest.

    Da knn man sich auf UTC beziehen

    muemmel schrieb:

    Das einzige, was Du machen kannst, ist beide Werte duerch die entsprechenden Funktionen in Jahr, Monat und Tag aufzugliedern und dann die 3 Werte separat zu subtrahieren.

    Eben nicht.
    Vom 31.12.2016 bis zum 01.01.2017 wären es dann 1 Jahr, -11 Monate und -30 Tage



  • Hör auf das was SeppJ geschrieben hat. Ansonsten...

    Datumsdifferenz schrieb:

    Datumsdifferenz zwischen 2 Datumsangaben in Jahren, Monaten, Tagen ausgibt.

    Das wäre mir viel zu schwammig definiert.
    Klar, man kann da schon 'was reininterpretieren was man exakt implementieren kann.
    Blöderweise gibt es bloss mehrere Varianten wie man es interpretieren kann.

    Was sollte z.B. rauskommen bei 2. Jan 2017 -> 10. Feb 2017? Und was bei 30. Dez. 2016 -> 7. Feb. 2017? Usw.

    Egal welcher Funktionen/Klassen du dich dann bedienst um es zu implementieren, das ist etwas was du erstmal wissen musst.

    Und ich persönlich würde eher davon abraten das überhaupt aufzusplitten. Die Differenz in Tagen sollte mMn. für die meisten Anwendungen reichen. Und die ist, wenn man mal vom gregorianischen Kalender ausgeht, eindeutig - da gibt es keinen Interpretationsspielraum. Zumindest nicht wenn man sich mit den Daten nicht weit von der Gegenwart entfernt.
    (Bzw. gibt es natürlich immer Interpretationsspielraum, aber deutlich weniger als wenn du in Jahre/Monate/Tage splitten willst.)



  • Falls du es entgegen SeppJ's Meinung dennoch selbst machen willst, könnte ich dir
    einen alten C-Code ausgraben.

    Der stammt noch aus der Zeit ohne die Klassen DateTime und TimeSpan.
    War reichlich aufwendig. 😋


Log in to reply