Kann mir jemand erklären warum ich hier das Jahr -1 und das Monat -1 nehmen muss?

...komplette Frage anzeigen

3 Antworten

Hallo Marvinokay123,

der Algorithmus soll die Tage bis zum angegebenen Datums vom Jahr 0 weg zählen. (Bei dir im code ist dieser fall nicht berücksichtigt, aber als bsp: wenn man den 1.0.0 als datum nimmt, dann sind 0 Tage vergangen, wenn man 1.1.0 nimmt, dann sind 31 Tage vergangen)

So, warum muss man nun vom monat und vom jahr 1 abziehen?

Da du die Tage haben willst bis zu diesem Datum, dass man mitgegeben hat, dann muss man es tun, denn mal angenommen man tut es nicht, dann wäre bei dem Datum 29.2.3 die (letzte) Iteration so: Tage = (t+3*365+ + t+28+31 + 29) das wäre dann  1183, richtig wären aber 790:
1. jahre: Falsch: Schleife durchläuft 3 mal: 3*365 = 1095
   richtig: Da sich das Datum IM 3. Jahr befindet darf es nur 2 Jahre Komplett zählen: 2*365 = 730
2. Bei MOnat gilt das gleiche wie bei jahr
3. Tage, das ist es egal

Fazit:
Da sich das Datum IN DIESEM Jahr befindet darf es nicht das komplette Jahr mitzählen. Genauso beim Monat. Der Tag befindet sich IN DIESEM Monat, also darf ich auch den kompletten monat nicht mitzählen.
Also man muss vom Jahr und monat jeweils 1 abziehen, da sonst ein ganzer monat und ein ganzes jahr zuviel mitgerechnet wurde.

Ich hoffe du konntest es verstehen, es ist gar nicht so leicht zu erklären :D

PS:
vom 1.1.0 bis einschließlich 1.2.0 sind es 32 Tage (31 Januartage + 1 vom Datumtag). Wenn man nicht monat -1 macht, dann würde das so aussehen: 
vom 1.1.0 bis einschließlich 1.2.0 sind es 50 Tage. (31 Januartage + 28 Februartage + 1 Datumtag) Verstehst es?

Grüße
SirNik

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von ralphdieter
17.04.2016, 13:32

Super erkannt! Kürzer könnte man sagen: Der Algorithmus im blauen Kasten berechnet die Zahl der Tage aus j ganzen Jahren, m ganzen Monaten und t ganzen Tagen.

tageberechnen(t,m,j) nutzt das, um die Tage seit 1.1.0001 einschließlich zu berechnen: Aber bis "t.m.j" sind eben nur j-1 ganze Jahre, m-1 ganze Monate und t Tage verstrichen.

1

am anfang der Funktion gehört

noch

j=-1;

und

m=-1 hin

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von SirNik
16.04.2016, 13:19

1) es steht da und 2) warum? das hatte er gefragt, warum das da stehen muss

0

welche sprache?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von SirNik
16.04.2016, 13:18

das ist eine semantische Frage. Hier ist es egal um welche Sprache es sich handelt. Hier zählt nur der algorithmus :D aber es sieht nach C-ähnlicher sprache aus

1

Was möchtest Du wissen?