Moin libe Gemeinde, hab da nen kleines Problem oder ich seh den Wald vor Bäumen nicht... also... ich habe ne Zahlenreihe (Jahr): 2000, 2004, 2008, 2012, 2016, 2020.... nun will ich abhängig von der laufenden Jahreszahl im Programm herausfinden, ob gerade ein Schaltjahr ist oder nicht. Wie könnte man(n) das Thema angehen? Gibt es irgend eine mathematische Formel....o.ä.? Grüße MAT
Schon mal da geguckt: http://de.wikipedia.org/wiki/Schaltjahr Ansonsten hat Peter Dannegger in der Codesammlung schon eine Uhr mit dieser Funktion vorgestellt.
in erster Näherung muss das Jahr durch 4 Teilbar sein , das reicht für die nächsten paar Jahre...
Die aller einfachste Methode ist, dass du in deinem Kalender alle Schaltjahre für das nächste Jahrtausend hinterlegst. Oder du guckst ob wann zuletzt ein Schaltjahr gewesen ist, und teilst durch Modulo 4. Immer wenn dein Aktuelles Jahr modulo 4 der selben Rest hat, wie dein letztes Schaltjahr, dann is wieder eins! Hoffe das stimmt auch... Ingo
Schonmal einen Blick auf den entsprechenden Wikipedia Artikel geworfen? Siehe hier (http://de.wikipedia.org/wiki/Schaltjahr). Dort heißt es z.B.: > Im Gregorianischen Kalender, der in fast allen Teilen der Welt allgemein > gebraucht wird, ist außer dreimal in 400 Jahren jedes vierte Jahr ein > Schaltjahr. Und: > Außerdem wurde die julianische Schalttagsregelung um eine Ausnahme- > Vorschrift ergänzt, der zufolge die Jahre 1700, 1800 und 1900 keine > Schalttage enthielten. Nach der neuen Schaltregel sind diejenigen > Säkularjahre, deren Zahl dividiert durch 400 keine natürliche Zahl ergibt, > auch keine Schaltjahre. Dies war bei den Säkularjahren 1700, 1800 und 1900 > der Fall. Nur noch jedes vierte Säkularjahr (zum Beispiel das Jahr 2000) > ist somit ein Schaltjahr geblieben. Das gregorianische Kalenderjahr hat > eine durchschnittliche Länge von 365,2425 Tagen. Der Fehler hat sich auf 1 > Tag in mehr als 3000 Jahren verringert, so dass voraussichtlich erst im > Jahre 4800 ein Schalttag zusätzlich entfallen muss, um das Kalender-Datum > 21. März in der Nähe des Zeitpunkts des Primar-Äquinoktiums zu > positionieren. In erster Näherung ist also Modulo 4 ganz gut, vorallem lässt sich das recht einfach in Binärdarstellung ausrechnen. Und bis die "Formel" nicht mehr zutrifft, läuft dein Projekt vermutlich sowieso nicht mehr ;).
Also um heraus zu finden, ob das Jahr ein Schaltjahr ist, musst du das Jahresdatum durch 4 teilen können (ohne Rest :-P) Theoretisch einfach den modulo von deiner Jahreszahl und 4 bilden und wenn 0 herraus kommt ist es ein Schaltjahr
Nicht ganz Modulo 4. Alle mit mod4, die nicht mod100 sind, aber bei mod400 schon. (Der Modulo muss 0 ergeben für die genannten Bedingungen). bsp: bool istSchaltjahr = (mod4(Jahr)==0) & (!(mod100(Jahr)==0) | (mod400(Jahr)==0)) (Hier sind mehr Infos: http://de.wikipedia.org/wiki/Schaltjahr#Gregorianischer_Kalender )
Lucas K. schrieb: > Nicht ganz Modulo 4. > > Alle mit mod4, die nicht mod100 sind, aber bei mod400 schon. Schon richtig. Aber das nächste Jahr, bei dem dies relevant wird, ist das Jahr 2100. Und ob sein µC dann noch im Einsatz ist, sei mal dahingestellt.
Hallo! wau.... jetzt bin ich sprachlos.... Soviele Antworten :) Jetzt muss ich erst einmal Eure Vorschläge mir auf der Zunge zergehen lassen :) Meld mich wenn's immer noch nicht klick gemacht hat! Danke nochmals!
STK500-Besitzer schrieb: > Ansonsten hat Peter Dannegger in der Codesammlung schon eine Uhr mit > dieser Funktion vorgestellt. Sieht eher nach einer Hausaufgabe aus "Programmieren für Köche" aus ;-)
Bei uns war das eines der ersten Programme die wir im 1. Semester in Java geschrieben haben. In meiner DCF-Uhr hatte ich das glaube ich auch eingebaut: Beitrag "DCF-Uhr mit LCD in C"
@ Lucas K., vielenDAnk für den Hinweis! Zwar musste ich noch weiter nach Modulo 4 im Netz suchen habe dann den richtigen Hinweis gefunden. Danke! MAT
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.