Algorithmus für Monatsdifferenz



  • @Datumsrechner:
    Kleiner Tipp. Schau dir mal die Funktionen aus time.h an.


  • Mod

    Datumsrechner schrieb:

    SeppJ schrieb:

    Du möchtest aber vielleicht gleich etwas weiter denken. Ist die Differenz zwischen 30.11. und 1.12. wirklich 1 Monat? Ist die Differenz zwischen 1.12. und 31.12. wirklich 0 Monate?

    Neiin, natürlich nicht :-), mein Ansatz wäre der, ein Datum in 3 Variablen aufzuteilen, also Jahr, Monat, Tag. Dann werden zunächst alle wichtigen Eigenschaften abgefragt, also z.B. Schaltjahr, 30 Tage oder 31 Tage, etc. Anschließend wird, wenn notwendig, subtrahiert.

    Wie schon gesagt: Das wird schnell sehr kompliziert. Dein Ansatz geht schon daneben: Ist nun der Abstand zwischen dem 1. Februar und dem 1. März gleich einem Monat und 0 Tagen, aber der Abstand zwischen 1. Dezember und 31. Dezember ist 0 Monate und 30 Tage? Dein Ansatz würde sagen: Ja!

    Der beste Tipp den man zu Datumsrechnungen daher geben kann: Tu's nicht! Wirklich nicht. Nutz fertige Bibliotheken, die haben viel Denkarbeit darein gesteckt und es ist keine Schande, auf der Arbeit anderer Leute aufzubauen. Im Gegenteil ist es ziemlich peinlich, wenn man es selber und falsch macht.



  • SeppJ schrieb:

    Wie schon gesagt: Das wird schnell sehr kompliziert. Dein Ansatz geht schon daneben: Ist nun der Abstand zwischen dem 1. Februar und dem 1. März gleich einem Monat und 0 Tagen, aber der Abstand zwischen 1. Dezember und 31. Dezember ist 0 Monate und 30 Tage? Dein Ansatz würde sagen: Ja!

    Das sehe ich nicht so. Wenn man ein Datum in 3 Variablen(Jahr, Monat, Tag) aufteilt, hat man die Grundlage, um alle Datumsdifferenzen ausrechnen zu können.(bezogen auf den aktuellen Kalender).
    Die Differenz zwischen dem 01.02. und dem 01.03. wäre 1 Monat + 1 Tag.
    Deswegen gibt es da für mich kein grundsätzliches Problem bei der Berechnung.
    Man hätte einmal die Variablen M1=2 und M2=3, Zusätzlich T2=1.
    Sofern M3>(evtl. und/oder <)M1 muß es je nach Differenz mindestens ein Monat + T sein. Die restlichen Tage werden dann durch T2 bestimmt.

    Die Differenz zwischen dem 01.12. - 31.12. wäre genau einen Monat.
    Dadurch, daß M1=M2 kann es nicht mehr als ein Monat sein.

    Ich sehe allerdings ein, daß viele Regeln einzuprogrammieren sind, wo man schnell die Übersicht verlieren kann.

    SeppJ schrieb:

    Der beste Tipp den man zu Datumsrechnungen daher geben kann: Tu's nicht! Wirklich nicht. Nutz fertige Bibliotheken, die haben viel Denkarbeit darein gesteckt und es ist keine Schande, auf der Arbeit anderer Leute aufzubauen. Im Gegenteil ist es ziemlich peinlich, wenn man es selber und falsch macht.

    Das stimmt, leider stehen mir fertige Bibliotheken aus ganz bestimmten Gründen(die ich wiederum aus ganz bestimmten Gründen nicht erläutern kann:-), nicht zur Verfügung. Deswegen muß ich das selber programmieren, bin aber der Auffassung, daß das schaffbar ist auch als Hobbyprogrammierer.



  • Datumsrechner schrieb:

    Die Differenz zwischen dem 01.12. - 31.12. wäre genau einen Monat

    Die Differenz wäre nicht ein Monat sondern 30 Tage, wobei der Dezember 31 Tage hat, aber bei dir scheint die Differenz immer Differenz+1 zu sein. Fail.

    EDIT:
    Nach deiner verqueren Logik müsste die Differenz vom 1.1.2017 und dem 1.1.2017 1 sein.



  • EOP schrieb:

    Datumsrechner schrieb:

    Die Differenz zwischen dem 01.12. - 31.12. wäre genau einen Monat

    Die Differenz wäre nicht ein Monat sondern 30 Tage, wobei der Dezember 31 Tage hat, aber bei dir scheint die Differenz immer Differenz+1 zu sein. Fail.

    Warum Fail? Wenn man Monatsdifferenzen berechnen will, kann man doch volle Monate immer mit 1 ansetzen, je nachdem, wofür man die Berechnungen braucht.

    EOP schrieb:

    EDIT:
    Nach deiner verqueren Logik müsste die Differenz vom 1.1.2017 und dem 1.1.2017 1 sein.

    Exakt. Das wäre genau ein Tag.

    Es gilt: Volle Jahre->Volle Monate->verbleibende Tage.



  • Warum willst du überhaupt eine Differenz in Monaten angeben wo doch ein Monat nicht genau definiert ist. Wieviele Tage hat ein Monat?



  • Datumsrechner schrieb:

    EOP schrieb:

    EDIT:
    Nach deiner verqueren Logik müsste die Differenz vom 1.1.2017 und dem 1.1.2017 1 sein.

    Exakt. Das wäre genau ein Tag.

    Es gilt: Volle Jahre->Volle Monate->verbleibende Tage.

    Und warum sind das nicht 0 Tage.

    Aus dem was du da schreibst folgt auch direkt:

    01.01.2017 + 1 Tag = 01.01.2017


Anmelden zum Antworten