2. Tipps und Tricks (zurück zur Startseite ) zurück zu Datum berechnen
Erweiterung Datum berechnen und Informationen (2.3.2008, Stand: 26.4.2013)
Zusammenfassung: Formeln
zu Datum und Feiertagen mit Osterkennzahl
Download Formeln
zu Feiertagen.pdf
Schaltjahr und
Anzahl der Schaltjahre berechnen
Tag-Nummer im Jahr berechnen, Schaltjahr,
Datumsdifferenz, Monatslänge
Datum_aus_Tagnummer des Jahres bilden,
Wochen-Nummer
im Jahr errechnen, richtige Wochennummer am Anfang und Ende des Jahres
Wochennummer mit Formel berechnen neue einfache Formeln
Datum einer Kalenderwoche Datum
aus Kalenderwoche und Wochentag bestimmen
Wochentag eines Datums berechnen im Julianischen und Gregorianischen Kalender
Einfache_Berechnung_des_Wochentages
Umrechnen vom Julianischen zum Gregorianischen Datum
Osterdatum_berechnen einfache Osterformeln,
Osterkennzahl E und
Osterkennziffer,
Frühester und spätester Ostertermin errechnen
Osterdatum_Julianischer_Kalender und gregorianischer Osteralgorithmus
für alle Jahrhunderte NEU
Bewegliche_Feiertage berechnen
Rosenmontag, Karfreitag, Himmelfahrt, Pfingsten, Fronleichnam
Auch_mit_Osterdatum_berechnen Buß- und Bettag , Muttertag , Datum
Sommerzeit , Datum Advent,
Wochentag_mit_Osterkennzahl von Weihnachten und Silvester berechnen
Test meiner
Osterformeln mit Gauß / Dr. Lichtenberg, J.M. Oudin, Anonym (Butcher),
O'Beirne,
Hutchin, Clavius, Piper (1841), Zeller
(Fehler z.B. 2011 korrigiert), usw.
siehe Osterformeln_Test.pdf
Ostersonntag in Tabellenkalkulation (z.B. Excel)
berechnen
Feiertage mit Jahreszahl berechnen
Berechnung
Muttertag, Advent, Datum Sommerzeit Winterzeit, Buß- und Bettag
Schweizer_Feiertage mit Jahreszahl oder Osterkennzahl berechnen
Allgemeine
Berechnung Datum für weitere_Feiertage und
besondere Tage
Weiter zu Datum berechnen für Steuerungen Berechnungen mit Basic z.B. für Steuerungsgeräte z.B. c-control
Wochentag, Jahrestag, Wochennummer (Kalenderwoche)
Osterdatum berechnen für Steuerungsgeräte mit Basic
Bewegliche Feiertage Rosenmontag, Karfreitag, Himmelfahrt, Pfingsten, Fronleichnam,
Muttertag, Advent, Datum Sommerzeit, Buß- und Bettag mit Osterdatum berechnen
Steuern mit Feiertagsbit für Heizung, Rollladen und Kirchenglocken
Programme für feste und bewegliche Feiertage
1)
Rechnen mit Ganzzahl und Rest
Achtung. Bei den folgenden
Berechnungen müssen Ganzzahl-Division (Kommastellen fallen weg) und
Divisions-Rest (MOD) angewendet werden.
Beispiel: Ganzzahl = 11 / 7 = 1 Rest
= 11 MOD 7 = 4
Zusätzliche Rechenregeln für Ganzzahl-Division und Divisions-Rest wurden bei den Formeln angewendet.
Kürzen: Vielfaches kann gekürzt werden. (x + 36) MOD 7 = (x + 35 +1) MOD 7 = (x + 1) MOD 7, weil 35 MOD 7 = 0 ist.
Faktoren dürfen nicht vertauscht werden, denn die Reihenfolge des Rechnens von links nach rechts würde zu einem anderen Ergebnis führen.
Ganzzahl 2 / 3 * 8 = 0 *8 = 0. Dagegen ergibt 8 * 2 / 3 = 16 / 3 = 5.
Gemeinsamer Nenner (Ziffer):
Bei Addition Y = 9 + 9 / 4 = 11 und mit gemeinsamen Nenner ist das Ergebnis gleich: Y = 5 * 9 / 4 = 11
Bei Subtraktion Y = 9 – 9 / 4 = 7 ist bei Ganzzahl-Division nicht gleich. Y = 3 * 9 / 4 = 6 , weil der Rest von A / 4 auch abgezogen wurde.
Man kann den Rest addieren: Y = 3 * 9 / 4 + 9 MOD 4 = 7. Einfacher ist Nenner –1 im Zähler zu addieren: Y = (3 * 9 + 3) / 4 = 7
Negative Zahl vermeiden, weil die Berechnung einfacher wird und auch weil einige Programme bei Modulo fehlerhaft rechnen.
Im folgenden Beispiel wird bei x = 0 die Zahl negativ. Durch Addition (hier 7 wegen MOD 7) erkennt man auch direkt das Ergebnis (hier =6).
(x –1) MOD
7 = (x –1 +7) MOD 7 = (x +6) MOD 7
Kann beispielsweise x = – 8 werden, dann beträgt der niedrigste Wert –9 , dann wird 14 addiert. Ein Vielfaches von 7 bei Rechnen mit MOD 7
Allgemein gilt : –a MOD y = (V *y – a) MOD y , zur Vermeidung negativer Ergebnisse z.B. bei a < 2* y gilt –a MOD 30 = (60 – a) MOD 30
Mit Gauß Formel – E MOD 7 = 6 * E MOD 7 kann umgeformt werden = (7 – E) MOD 7 = 7 –1 – (E –1 +7) MOD 7 = 6 – (E + 6) MOD 7
Mit y = 6 – ( E + x ) MOD 7 = (6 * E + x ) MOD 7 = (6 * E + 6 – x ) MOD 7 kann man auch umformen zum Beispiel bei Osterkennzahl E
WoTag = 6 – ( E + 6 ) MOD 7 WoTag = 6 * E MOD 7 ' alternative Formeln für Wochentag 1. Weihnachtstag 25.12.
Allgemein gilt : –z * x MOD y = (y – z) * x MOD y , zur Vermeidung negativer Ergebnisse z.B. (a – 1*x) MOD 30 = (a + 29*x) MOD 30
2)
Schaltjahre berechnen
(1) Schaltjahr
erkennen
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Erläuterung: 1 / (1+Jahr MOD 4) ist = 1, wenn Jahr MOD 4 = 0 (also Schaltjahr) ist. Gültig für 1901 bis 2099
Je nach Bedarf kann die Jahrhundertregel –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) weggelassen werden. Sie ist erst wieder für das Jahr 2100 bzw. 2400 notwendig.
(2) Zweite Möglichkeit Schaltjahr bestimmen (z.B. für Tabellenkalkulation)
SJ = (Jahr +3) MOD 4 / 3 – (Jahr +99) MOD 100 / 99 + (Jahr +399) MOD 400 / 399 ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Erläuterung: Jahr MOD 4 rotiert 0, 1, 2, 3 von Jahr zu Jahr. Der Summand +3 sorgt dafür, dass nur im Schaltjahr SJ = 3 / 3 = 1 wird.
(3) Dritte Möglichkeit Schaltjahr bestimmen
SJ = Jahr / 4 – Jahr / 100 + Jahr / 400 – (Jahr –1) / 4 + (Jahr –1) / 100 – (Jahr –1) / 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Erläuterung: Von der Anzahl der Schaltjahre beginnend beim Jahr 1 bis zum aktuellen Jahr wird die Anzahl bis zum Vorjahr subtrahiert.
(4) Schaltjahr mit Boolescher Algebra bestimmen (bei Systemen mit Ergebnis –1 statt 1 muss –SJ verwendet werden)
SJ = ((Jahr MOD 4 = 0) AND (Jahr
MOD 100 >< 0)) OR (Jahr MOD 400 = 0)
(5) Schaltjahr bestimmen einfache Lösung (bei Systemen mit Ergebnis –1 statt 1 muss –SJ verwendet werden)
SJ = (Jahr MOD 4 = 0) – (Jahr MOD
100 = 0) + (Jahr MOD 400 = 0)
3)
Tag-Nummer im Jahr berechnen, Jahrestag
Das Datum bestehend aus Tag und Monat wird in Tagnummer umgewandelt.
(1) Tagnummer mit Formel berechnen (alle Jahrhunderte) aus Tag, Monat und Jahr
TagNr = Tag + 31 * Monat –31 ' Tagnummer im Jahr für Januar und Februar
TagNr = Tag + (153 * Monat –162) / 5 + SJ ' Tagnummer im Jahr für März bis Dezember
TagNr = Tag +
489 * Monat / 16 – 32 + SJ ' alternativ für März bis Dezember
Zwischen den beiden Formeln kann man umschalten mit
if Monat < 3 then TagNr = Tag + 31 * Monat –31 else TagNr = Tag + 489 * Monat / 16 – 32 + SJ
(2) Eine
Formel für alle Monate zur Berechnung der Tagnummer
TagNr = Tag +
489 * Monat / 16 – 30 + (7 + Monat) / 10 *(SJ – 2)
Wegen des Wertes für Januar 489 * 1 / 16 werden 30 Tage abgezogen.
Der Term 489 * Monat /16 sorgt für die Monatslängen 31 und 30 Tage ab März.
Der Term (7+Monat) / 10 beträgt im Januar und Februar = 0 und ab März = 1.
Damit wird ab März das Schaltjahr berücksichtigt und die Korrektur wegen Februar –2 Tage eingeschaltet.
Ansonsten entspricht die Formel der Geraden y = ax + b mit y = b = 32 bei x = 0 und Steilheit der Geraden a = 489 / 16 .
TagNr = Tag +
489 * Monat SHR 4 – (13 + Monat) SHR 4 *(2 – SJ) – 30
Die gleiche Formel alternativ mit Befehl Schiebe rechts 4 Bit statt / 16.
(3) Weitere
Formel
TagNr = Tag + (153 * Monat –162) / 5 + (7 + Monat) / 10 *SJ + 2 / Monat *3 – 1 / Monat *5 ' Tagnummer im Jahr für Januar bis Dezember
Der Term (7+Monat) / 10 beträgt im Januar und Februar = 0 und ab März = 1. Damit wird ab März die Korrektur +1 für Schaltjahr eingeschaltet.
Für Februar wird eine Korrektur +3 eingeschaltet mit dem Term 2 / Monat, weil die Grundformel nur 28 Tage ergibt. Dies ergibt aber +6 für Januar.
Für Januar ist nur eine Ergänzung +1 notwendig. Deshalb wird mit Term 1 / Monat *5 korrigiert (6 –5).
(4) Weitere
Formel
TagNr = Tag + (153 * Monat –162) / 5 + SJ + 3 / (Monat +1) *(Monat*2 –1– SJ) ' Tagnummer im Jahr für Januar bis Dezember
Der Tag für Schaltjahr wird für alle Monate addiert, jedoch bei der Korrektur für Januar und Februar wieder abgezogen.
Für Januar und Februar ist eine Ergänzung notwendig. Hierfür dient der Term (Monat*2 –1..) , der für Januar 1 und für Februar 3 ergibt.
Diese Korrektur wird ab März ausgeschaltet mit dem Term 3 / (Monat +1). Im März ist das Ergebnis =0, weil 3 / (3+1) = 3 / 4 = 0 (Ganzzahl).
Alternativ kann die Korrektur für Januar/Februar mit (Monat < 3) mit Boolescher Algebra oder mit (if ... then .. ) erfolgen.
(5) Weitere
Formel
TagNr = Tag + 2 / Monat * (Monat –1) *31 + (7 + Monat) / 10 * ((153 * Monat –162) / 5 + SJ) ' Tagnummer im Jahr für Januar bis Dezember
Der Term 2 / Monat ist ab März =0. Der Term (Monat –1) *31 ist im Januar =0 und im Februar = 31 für die 31 Tage des Januar.
Der Term (7 + Monat) / 10 ist erst ab März = 1 .
(6) Weitere Formel für Berechnung der Tagnummer
TagNr = Tag + 30 * Monat –30 + Monat *9 / 16 – (7 + Monat) / 10 *(2 – SJ) Schaltjahrkennung SJ siehe oben.
Zunächst werden für jeden Monat nach Januar 30 Tage angesetzt, dann wird korrigiert.
Der Term Monat *9 / 16 sorgt für + 1 Tag ab Januar bei ungeraden Monaten und ab August bei geraden Monaten.
Der Term (7+Monat) / 10 beträgt im Januar und Februar = 0 und ab März = 1. Damit wird ab März die Korrektur wegen Februar und Schaltjahr eingeschaltet.
(7) Tagnummer
bestimmen mit Programmzeilen oder mit Formel errechnen für Programme z.B.
Basic (1901 bis 2099) siehe Datum
berechnen für Steuerungen
(8) Tagnummer
von Ostern und den beweglichen Feiertagen berechnen
Tag mit
Osterkennzahl E = 1 ist der 1. Dezember
des Vorjahres auch bei Schaltjahren.
Der Jahrestag von Ostersonntag ist die Osterkennzahl plus 1 für Ostersonntag, minus 31 für Dezember und minus 3 bzw. 2 Tage wegen Februar.
TagNr (von
Ostersonntag) = E – 33 + SJ
Beispiel: Ostersonntag ist der 24.4. 2011. Der 23.4.2011 ist Ostersamstag mit der Osterkennzahl E = 147. (Berechnung der Osterkennzahl siehe unten)
Jahres-TagNr (Ostersonntag) = E – 33 = 147 – 33 = 114
TagNr
(bewegliche Feiertage) = E – 33 + SJ + D
Beispiel: 2011 Pfingstmontag liegt 50 Tage nach Ostern Tagnummer = 147 –33 + 0 + 50 = 164
Rosenmontag liegt 48 Tage vor Ostern Tagnummer = 147 –33 + 0 – 48 = 66
TagNr (Buß- und
Bettag) = 320 + SJ + E MOD 7
Erläuterung:
Datum Tag = 16 + E MOD 7 und Tagnummer vom frühesten Datum 16.11. (=320)
ergeben die Formel.
TagNr (Muttertag) = 128
+ SJ + E MOD 7 – 118 / E
* 7 (mit Korrektur wegen Pfingsten)
Erläuterung:
Datum Tag = 8 + E MOD 7 –118 /E*7 und Tagnummer vom frühesten Datum 8.
Mai (=128) ergeben die Formel.
(9) Abstand
von Datum zu Datum
(Datumsdifferenz), Variabler Abstand zwischen beweglichen Feiertagen
Wie viele Tage liegen zwischen Weihnachten
und Ostern im nächsten Jahr?
Beispiel 24.12.2011 und Ostersonntag 2012 (E = 131), 2012 ist ein Schaltjahr
Lösung mit TagNr (Ostersonntag) und zusätzlich als Distanz die Tage im Dezember D =31 –24 = 7 ergibt
Anzahl =
E –33 +SJ +D = 131 –33 +1 +7 = 106
Wie viele
Tage liegen zwischen Ostern und Weihnachten im gleichen Jahr?
Beispiel Ostersonntag 2012 (E = 131) und 24.12.2012
Lösung: TagNr vom 24.12. = Tag + (153 * Monat –162) / 5 + SJ = 358 + SJ , (Kontrolle 365 +SJ – 31+24)
minus TagNr von Ostersonntag = E – 33 + SJ ergibt = 358 +SJ – (E –33 +SJ) ergibt die Formel:
Anzahl = 391 – E = 391 –131 = 260
Wie viele Tage liegen zwischen Ostern und Buß- und Bettag oder Muttertag?
Beispiel Ostersonntag 2012 (E = 131),
Erläuterung: Differenz obiger Formeln der Tagnummer
ergibt die Formel.
Anzahl = 353 – E + E MOD 7 = 353 – 131 + 5 = 227 Tage von Ostern bis Buß- und Bettag
Anzahl = 161 – E + E MOD 7 – 118 / E *7 = 161 – 131 + 5 – 0 = 35 Tage von Ostern bis Muttertag
Der größte Abstand zu Muttertag beträgt 42 Tage bei 12 frühen Osterterminen (E = 114 bis 125).
Der kleinste Abstand beträgt 14 Tage bei 2 späten Osternterminen (E = 147 und 148).
Wie viele Tage sind es noch bis Weihnachten?
Für jedes Datum wird die Tagnummer (=Jahrestag, siehe oben) ausgerechnet und die Differenz gebildet.
Welches Datum ist in 30 Tagen oder vor 30
Tagen?
Für das aktuelle Datum wird die Tagnummer (=Jahrestag, siehe oben) ausgerechnet und Anzahl Tage addiert bzw. subtrahiert.
Bei Überschreitung des Jahres müssen natürlich 365 bzw. 366 Tage addiert bzw. subtrahiert werden.
Das Datum wird mit der neuen Tagnummer berechnet (siehe unten).
4) Tage
im Monat
(1)
Monatslänge bestimmen = Letzter Tag (Datum) im Monat
Je nach Monat beträgt die Monatslänge 30 oder 31 oder 28 (29) Tage.
Der Abstand vom 1. eines Monats zum 1. eines anderen Monats kann mit der Differenz der Tagnummern berechnet werden.
Einfacher ist die Monatslänge 30 Tage mit ungerader bzw. gerader Monatszahl und Schaltjahr zu korrigieren.
SJ = 1 / (1+Jahr MOD 4) – 1 / (1+Jahr MOD 100) + 1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Monatslänge = 30 + (Monat * 9 / 8) MOD 2 – 2 / Monat * (Monat –1) *(2 – SJ)
Der Term (Monat * 9 / 8) MOD 2 ergibt den Wert +1 ab Januar bei ungerader Monatszahl und ab August bei gerader Monatszahl.
2 / Monat * (Monat –1) ergibt nur für Februar den Wert 1 ansonsten 0. Alternativ: (Monat / 2)*(2 / Monat) ist nur Februar = 1.
(2) Anzahl der Tage der vorher gehenden Monate
In eine der obigen Formeln für Tag-Nummer wird Tag =0 eingesetzt und man erhält für die vorher gehenden Monate
Anzahl Tage = 489 * Monat / 16 – 30 + (7 + Monat) / 10 *(SJ – 2) (gültig für Monate Januar bis Dezember)
z.B. für März 489 * 3 / 16 – 30 + (7+3) / 10 *(SJ –2) = 59 + SJ = Anzahl der Tage vor dem 1. März (Kontrolle 31 +28 +SJ).
(3) Jahrestag am Monatsende
Monatsende
TagNr = (153 * Monat – 9) / 5 + SJ + 1 / Monat * (3 – SJ)
Beispiel Februar = (153*2 – 9) / 5 + SJ + 0 = 59 bzw. 60 , Kontrolle (Januar + Februar = 31+28 +SJ)
Erläuterung: Die Formel basiert auf dem Monatsende, das gleich dem Folgemonat mit Datum Tag =0 ist. Dadurch entfällt die Eingabe des Tages.
Term 1 / Monat ist nur für Januar =1 sonst =0. Für Januar ist das Ergebnis zunächst 28 Tage, deshalb wird mit +3 korrigiert.
Dabei wird auch SJ abgezogen, weil das Schaltjahr erst Ende Februar wirksam wird.
Alternative Formel Monatsende TagNr =
30 *Monat + (Monat +1) *9 / 16 –
(10 +Monat) / 12 *(2 – SJ)
Monatsende TagNr = 489 * (Monat +1) /
16 – 32 +SJ + 1 / Monat * (2 – SJ)
5) Datum
aus Tag-Nummer des Jahres berechnen (alle Jahrhunderte)
Aufwändiger ist, Tagnummer des Jahres in ein Datum bestehend aus Tag und Monat umzuformen.
Januar, Februar und Schaltjahr (4-stellig) sind beim Umwandeln des Jahrestages in ein Datum in den Formeln berücksichtigt.
SJ = 1 / (1+Jahr MOD 4) – 1 / (1+Jahr MOD 100) + 1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
(1) Wegen Februar mit Tag-Korrektur ab März (Tag 60)
Tk = TagNr + 30 + (TagNr + SJ + 400) / 460
*(2 – SJ) ' Tag Korrekturwert wegen Januar und Februar
und Schaltjahr
Monat = Tk * 16 / 489
Tag = TagNr + 30 – 489 * Monat / 16 + (7 + Monat) /
10 *(2 – SJ)
(2) Mit Januar und Februar als Monat 13 und 14 (+365 bzw. 366 Tage)
Tk = TagNr – SJ + ( 459 + SJ – TagNr ) / 400 * (365 + SJ) ' Tag Korrekturwert, Schaltjahr, Januar und Februar (+365 Tage)
Mk = ( Tk * 5 + 161 ) / 153 ' Monat Korrekturwert ( 3 bis 12, 13, 14)
Tag = Tk – ( 153 * Mk – 162 ) / 5 ' Datum Tag
Monat = 1 + ( Mk – 1 ) MOD 12 ' Datum Monat ( gewandelt in 1 bis 12)
Alternativ Monat = Mk – Mk / 13 * 12
(3) Mit Januar und Februar Tag- und Monats-Korrektur
Mk = SJ + (431 – TagNr ) / 400 * TagNr / 10 ' Monatskorrekturwert für Schaltjahr und Januar (Tag 1 bis 31)
Monat = (( TagNr – Mk ) *
5 + 161) / 153 '
Datum Monat
Tk = SJ + 3 / ( Monat +1) * ( 2 * Monat –1 – SJ ) 'Tag Korrekturwert Januar (+1), Februar (+3), Schaltjahr
Tag = TagNr – Tk – ( 153 * Monat – 162 ) / 5 ' Datum Tag
6)
Wochen-Nummer berechnen, Kalenderwoche
Die Berechnung erfolgt mit der Tag-Nummer des Jahres, dessen Berechnung aus dem Datum siehe oben.
Das folgende Programm und die Formeln geben die Kalenderwoche von Montag bis Sonntag aus.
Die europäische Norm für die
Wochennummerierung wird eingehalten. Achtung, Woche
1 ist die Woche, in welcher der 4. Januar liegt.
Die häufigen Fehler treten hier nicht auf, sondern am Anfang und Ende des Jahres werden die richtigen Wochennummern bestimmt.
Zum Beispiel liegt der 31.12.2013 in Woche 1 des Jahres 2014.
2015 hat 53 Wochen und die ersten Tage 2016 gehören zu Woche 53 des Jahres 2015.
6.1) Wochen-Nummer
mit Programmzeilen bestimmen, Kalenderwoche
Eingänge des Programmbausteins sind Tag-Nr des Jahres in Variable D
und Jahr 4-stellig in Variable RJ ist gültig für alle Jahrhunderte
Ausgänge (Ergebnis) sind die Wochen-Nr. in Variable KW mit zugehörigem Jahr in Variable RJ
D = TagNr ' des
Jahres 1 bis 365 bzw. 366
RJ = Jahr –1
' Rechen-Jahr 4-stellig für
3.1. ist das Vorjahr
gosub
WochenNr ' Berechnung der Wochennummer
if KW = 0
then goto WoNull ' à Woche vom 31.12. des Vorjahres
if KW = 53
then goto WoPruef ' à Woche vom 1.1. des Folgejahres prüfen
RJ = Jahr ' RJ
wird gesetzt für Anzeige zugehöriges Jahr
goto ende ' à Fertig, Wochennummer 1 bis 52
liegt in Variable KW
#WoPruef ' Woche 53 prüfen mit Woche vom 1.1. des
Folgejahres
D = 1
RJ = Jahr '
Rechenjahr für 3.1. (Vorjahr vom Folgejahr ist aktuelles Jahr)
gosub WochenNr
' (Wochennummer wird geprüft)
RJ = Jahr +
1 '
RJ wird gesetzt für Anzeige zugehöriges Jahr
if KW = 1
then goto ende ' à Fertig, Woche 1 des
Folgejahres
KW = 53 ' Woche 53 ist richtig
RJ = Jahr ' RJ
wird gesetzt für Anzeige zugehöriges Jahr
goto ende ' à Fertig, Wochennummer 53
#WoNull ' gültig ist Woche vom 31.12. bzw. 30.12. des Vorjahres
D = 365
' Jahrestag 365 = 31. bzw. 30.12.
RJ = Jahr –
2 '
Rechenjahr für Berechnung Wochentag 3. Januar ist wegen Januar das Vorvorjahr
gosub
WochenNr ' (Korrektur der Wochennummer
und des Jahres)
RJ = Jahr –
1 ' RJ
wird gesetzt für Anzeige zugehöriges Jahr
goto ende ' à Fertig, Wochennummer 52 bzw. 53 liegt in
Variable KW
' Unterprogramm, Grundformel zur Bestimmung der Wochennummer
#WochenNr '
' Rechenjahr
für Berechnung Wochentag 3. Januar ist wegen Januar immer das jeweilige Vorjahr
WoTag = ((3
+ RJ + RJ / 4 – RJ / 100 + RJ / 400) MOD 7 ' WoTag 3.1. im Jahr RJ
KW =
(WoTag + D +3) / 7
' Wochennummer
Return ' à Ausgang: Wochennummer KW
#ende
print “ Woche: “;KW;“ zu Jahr “;RJ;“ “ ' Wochennummer mit zugehörigem Jahr
Wenn am Anfang des Jahres Woche 52 oder 53 gilt, dann zeigt das zugehörige Jahr das Vorjahr.
Wenn am Ende des Jahres Woche 1 gilt, dann ist das zugehörige Jahr das Folgejahr.
Anmerkung: Das Programm berechnet den Wochentag vom 3. Januar mit dem Rechenjahr = (Jahr –1), weil im Januar ein Schaltjahr noch nicht wirksam ist.
6.2) Wochen-Nummer
mit Formeln berechnen mit Datum Tag Monat Jahr
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Alternative Formel einschließlich Schaltjahr vor dem aktuellen
DJ = 2 / (1+Jahr MOD 4) – 2 / (1+Jahr MOD 100) +2 / (1+Jahr MOD 400) ' im Schaltjahr = 2, Schaltjahr +1 = 1, sonst = 0
SJ = DJ / 2 ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
SVJ = DJ – 2 *SJ ' Schaltjahrkennung für Vorjahr = 1, sonst = 0
JT = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30 ' Tag-Nr des Jahres
(1) Wochennummer
für alle Jahrhunderte mit Osterkennzahl E (Osterberechnung E siehe
unten)
JT = Tag-Nr des Jahres und Schaltjahr SJ SVJ (wie vor)
A = (6 * E +1 – SJ) MOD 7 ' Wochentag 3.1. berechnet mit Osterkennzahl E
G = (JT + A +3 ) / 7 ' Grundwert Wochennummer (richtig bei 1 bis 52)
AJ
= (53 – G) / 53 ' =1 bei
G = 0 Vorjahr am Anfang des Jahres (sonst =0)
EJ = G / 53 '=1 bei
G =53 am Ende des Jahres (sonst =0)
'Prüfung bei Woche = 53 (Ende des Jahres)
ZE = 1 – (A + SJ) / 6 ' = 0 bei Jahr mit 53 Wochen, weil 3.1. Sa oder Fr +SJ = 6 oder 7
KE = EJ * ZE *52 ' bei Woche 53 (= 0 bzw. 52 zur Erzeugung Woche 1)
'Prüfung bei Woche = 0 (Anfang des Jahres)
AV = (6*E – SJ – SVJ) MOD 7 ' Wochentag 3.1. Vorjahr
ZV = (AV + SVJ) / 6 ' = 1 bei Vorjahr 53 Wo., weil 3.1.Vorjahr Sa oder Fr +VSJ = 6 oder 7
KA = AJ * (52 + ZV) ' bei WoNr =0 , dafür 52 bzw. 53
WoNr = G + KA – KE ' Wochennummer
Zugehöriges
Jahr = Jahr – AJ + EJ * ZE ' mit Korrektur für Anfang bzw. Ende Jahr
(2) Wochennummer
mit Jahr 4-stellig für 1901 bis 2099
JT = Tag-Nr des
Jahres (siehe 1)
G = ((5 * Jahr +3) / 4 MOD 7 + JT +3) / 7 ' Grundwert Wochennummer
A = 1 / (G +1) ' =1 für Berechnung mit Vorjahr bei G =0
KA = A * 362 '
Korrektur Jahresanfang bei G = 0; Woche 53 oder 52
KE
= G / 53 * ((5 * Jahr +8) /
4 MOD 7 + 4) / 7 *52 ' Korrektur Jahresende bei G =
53; für Woche 1 statt 53
WoNr = ((5 * (Jahr – A) +3) /
4 MOD 7 + JT +3 + KA) / 7 – KE '
Wochen-Nummer
(3) Jahr
(year) 2-stellig 01 bis 99 für 2001 bis 2099
JT = Tag-Nr des
Jahres (siehe 1)
G = ((5 * year +7) / 4 MOD 7 + JT +3) / 7 ' Grundwert Wochennummer
A = 1 / (G +1) ' =1 für Berechnung mit Vorjahr bei G =0
KA = A * 362 '
Korrektur Jahresanfang bei G = 0; Woche 53 oder 52
KE
= G / 53 * ((5 * year +12) /
4 MOD 7 + 4) / 7 *52 ' Korrektur Jahresende bei G =
53; für Woche 1 statt 53
WoNr = ((5 * (year – A) +7) / 4 MOD 7
+ JT +3 + KA) / 7 – KE ' Wochen-Nummer
(4) Wochennummer für alle Jahrhunderte mit Jahr 4-stellig (Alternative 1)
JT = Tag-Nr des
Jahres und Schaltjahr SJ SVJ (siehe 1)
Jx = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Wochentag 31.12. (Jahr)
A = (2 + Jx – SJ) MOD 7 ' Wochentag 3.1., Jx Jahreskennziffer
G = (JT
+ A +3 ) / 7 ' Grundwert Wochennummer
(richtig bei 1 bis 52)
AJ
= (53 – G) / 53 ' =1 bei
G = 0 Vorjahr am Anfang des Jahres (sonst =0)
EJ = G / 53 '=1 bei
G =53 am Ende des Jahres (sonst =0)
'Prüfung bei Woche = 53 (Ende des Jahres)
ZE = 1 – (A + SJ) / 6 ' =0 bei Jahr mit 53 Wochen, weil 3.1. Sa oder Fr +SJ = 6 oder 7
KE = EJ * ZE *52 ' bei Woche 53 (= 0 bzw. 52 zur Erzeugung Woche 1)
'Prüfung bei Woche = 0 (Anfang des Jahres)
AV = (6*E – SJ – SVJ) MOD 7 ' Wochentag 3.1. Vorjahr
ZV = (AV + SVJ) / 6 ' = 1 , bei Vorjahr 53 Wochen, weil 3.1.Vorjahr Sa oder Fr +VSJ = 6 oder 7
KA = AJ * (52 + ZV) ' bei WoNr =0 , dafür 52 bzw. 53
WoNr = G + KA – KE ' Wochennummer
Zugehöriges
Jahr = Jahr – AJ + EJ * ZE ' mit Korrektur für Anfang bzw. Ende Jahr
(5) Wochennummer für alle Jahrhunderte (Alternative 2)
JT = Tag-Nr des
Jahres und Schaltjahr SJ (siehe 1)
VJ =
Jahr –1 ' Vorjahr für Berechnung Wochentag im Januar des Jahres
A = (3 + VJ + VJ / 4 – VJ /
100 + VJ / 400) MOD 7 ' Wochentag 3.1. des aktuellen bei Jahres
G =
(A + JT +3) / 7 '
Grundwert Wochennummer (richtig bei 1 bis 52)
KA = (100 – G) / 100 ' bei
G =0 Korrektur für Anfang des Jahres KA=1 für Berechnung mit Jahresende
vom Vorjahr
KE = G /
53 ' bei
G =53 Korrektur für Ende des Jahres KE=1 für Berechnung mit Jahresanfang
vom Folgejahr
RJ = Jahr –1 – KA + KE ' Rechenjahr mit Vorjahr bei G = 0 bzw. mit
Folgejahr zum Prüfen bei Wo =53
RT = (3 + RJ + RJ / 4 – RJ /
100 + RJ / 400) MOD 7 ' Wochentag 3.1. entsprechend Jahr, Vorjahr
oder Folgejahr
W = (RT + 3 + JT *(1 – KE) + KA
*362) / 7 ' Wochennummer berechnet mit Rechenjahr bzw.
mit Ende Vorjahr bzw. mit Anfang Folgejahr
KJ = (100 – W) / 100 ' Korrektur Jahr KJ= 1 bei Wochenwert W = 0
WoNr = W
+ KJ * 53 ' Wochen-Nummer
zugehöriges Jahr =
RJ + 1 – KJ
Erläuterung:
Die Gültigkeit der
Wochennummer 53 am Jahresende wird mit der Wochennummer vom Anfang des
Folgejahrs geprüft.
Wenn das Ergebnis =0 ist,
stellt obiger Rechengang 53 wieder her. Andernfalls lautet das Ergebnis Woche
1.
Der Term (100 – W) / 100 ergibt = 1 bei Wochenwert W =
0 , bei Wochenwert W = 1 (bis 53) ist das Ergebnis des Terms = 0.
Da mit dem Folgejahr
gerechnet wurde, wird damit auch das zugehörige Jahr zur Wochennummer bestimmt.
(6) Wochennummer für alle Jahrhunderte (Alternative 3)
ZJ = Jahr / 4 –
Jahr / 100 + Jahr / 400 ' Anzahl Schalttage vorher gehender Jahre für aktuelles Jahr
VJ = Jahr –1 ' Vorjahr
ZVJ =
VJ / 4 – VJ / 100 + VJ / 400 ' Anzahl Schalttage für Vorjahr
SJ = ZJ – ZVJ ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
JT = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30 ' Tag-Nr des Jahres
A = (2 + Jahr + ZVJ) MOD 7 ' WoTag 3.1. bei Jahr
G =
(A + JT +3) / 7 '
Grundwert Wochennummer (richtig bei 1 bis 52)
KA = (100 – G) / 100 ' bei
G =0 Korrektur für Anfang des Jahres KA=1 für Berechnung mit Jahresende
vom Vorjahr
KE = G /
53 ' bei
G =53 Korrektur für Ende des Jahres KE=1 für Berechnung mit Jahresanfang
vom Folgejahr
RJ = Jahr –1 – KA + KE ' Rechenjahr mit Vorjahr bei G = 0 bzw. mit
Folgejahr zum Prüfen bei Wo =53
RT = (3 + RJ + RJ / 4 – RJ /
100 + RJ / 400) MOD 7 ' Wochentag 3.1. entsprechend Jahr, Vorjahr
oder Folgejahr
W = (RT + 3 + JT *(1 – KE) + KA
*362) / 7 ' Wochennummer berechnet mit Rechenjahr bzw.
mit Ende Vorjahr bzw. mit Anfang Folgejahr
KJ = (100 – W) / 100 ' Korrektur Jahr KJ= 1 bei Wochenwert W = 0
WoNr = W
+ KJ * 53 ' Wochen-Nummer
zugehöriges Jahr =
RJ + 1 – KJ
(7) Wochennummer für alle Jahrhunderte (Alternative 4)
VJ = Jahr
–2
ZVV = VJ / 4 – VJ / 100 + VJ / 400 '
Anzahl Schalttage Vorvorjahr
RJ = Jahr –1 '
ZVJ = RJ / 4 – RJ / 100 + RJ / 400
' Anzahl Schalttage Vorjahr
ZJ = Jahr / 4 –
Jahr / 100 + Jahr / 400 ' Anzahl Schalttage aktuelles Jahr
SVJ = ZVJ – ZVV ' Schaltjahrkennung für Vorjahr = 1, sonst = 0
SJ = ZJ – ZVJ ' Schaltjahrkennung für Jahr = 1, sonst = 0
JT = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30 ' Tag-Nr des Jahres
A = (2 + Jahr +
ZVJ) MOD 7 ' Wochentag 3.1. Jahr
(ZVJ Schaltjahre bis Vorjahr, weil Januar)
G = (A + JT +3) / 7 ' Grundwert Wochennummer (richtig bei 1 bis 52)
'Prüfen bei Woche = 53 für Jahresende Woche 53 oder 1
B = (A + SJ) MOD 7 / 6 ' = 1, wenn Jahr 53 Wochen (3.1. ist Samstag ohne oder Freitag mit Schaltjahr)
C = A / 6 * SJ ' = 1, wenn Jahr 53 Wochen (3.1. ist Samstag im Schaltjahr)
JE = G/53 *(1 – B – C) ' = 1 , wenn Wo 1 statt 53
KE = JE *52 ' Korrekturwert für Ende des Jahres, wenn Wo 1 statt 53
'Prüfen bei Woche = 0 für Jahresanfang Woche 52 oder 53
D = (A + 6 – SVJ) MOD 7 / 6 ' =1 , wenn Vorjahr 53 Wochen (3.1. ist Samstag ohne oder Freitag mit Schaltjahr)
F = (A + 6) MOD 7 / 6 * SVJ ' =1 , wenn Vorjahr 53 Wochen (3.1. ist Samstag im Schaltjahr)
KJ = (100
– W) / 100 ' Korrektur Jahr KJ= 1 bei Wochenwert W = 0
KA = KJ *(52 + D + F) ' Korrektur für Anfang des Jahres, wenn Wo =0, dann Vorjahr WoNr 52 oder 53
WoNr = G – KE + KA ' Wochen-Nummer
zugehöriges
Jahr = Jahr – KJ + JE
(8) Wochennummer für alle Jahrhunderte (Alternative 5)
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
JT = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30 ' Tag-Nr des Jahres
RJ = Jahr –1 ' Vorjahr
SVJ = 1 / (1+RJ MOD 4) –1 / (1+RJ MOD 100) +1 / (1+RJ MOD 400) ' Schaltjahrkennung vom Vorjahr
A = (3+RJ + RJ
/ 4 – RJ / 100 + RJ / 400) MOD 7 ' Wochentag 3.1. Jahr (RJ Vorjahr, weil
Januar)
G = (A + JT +3) / 7 ' Grundwert Wochennummer (richtig bei 1 bis 52)
'Prüfen bei Woche = 53 für Jahresende Woche 53 oder 1
B = (A + SJ) MOD 7 / 6 ' = 1,
wenn Jahr 53 Wochen (3.1. ist Samstag ohne oder Freitag mit Schaltjahr)
C = A / 6 * SJ ' = 1, wenn Jahr 53 Wochen (3.1. ist Samstag im Schaltjahr)
JE = G/53 *(1 – B – C) ' = 1 , wenn Wo 1 statt 53
KE = JE *52 ' Korrekturwert für Ende des Jahres, wenn Wo 1 statt 53
'Prüfen bei Woche = 0 für Jahresanfang Woche 52 oder 53
D = (A + 6 – SVJ) MOD 7 / 6 ' =1 , wenn Vorjahr 53 Wochen (3.1. ist Samstag ohne oder Freitag mit Schaltjahr)
F = (A + 6) MOD 7 / 6 * SVJ ' =1 , wenn Vorjahr 53 Wochen (3.1. ist Samstag im Schaltjahr)
KJ = (100
– W) / 100 ' Korrektur Jahr KJ= 1 bei Wochenwert W = 0
KA = KJ *(52 + D + F) ' Korrektur für Anfang des Jahres, wenn Wo =0, dann Vorjahr WoNr 52 oder 53
WoNr = G – KE + KA ' Wochen-Nummer
zugehöriges Jahr =
Jahr – KJ + JE
Erläuterung zu den Formeln:
Ein Jahr hat 53 Wochen, wenn
1. Januar Donnerstag oder bei Schaltjahr Mittwoch ist.
Der 3. Januar ist dann
Wochentag 6 Samstag. bzw. bei Schaltjahr Freitag.
Wochentag / 6 ergibt
nur Samstag = 1 ansonsten = 0 und ist damit ein Merkmal für ein Jahr mit 53 Wochen,
wenn zusätzlich bei Schaltjahr SJ addiert wird.
Beim Vorjahr war der
Wochentag 3.1. z.B. Freitag statt Samstag bezogen auf das aktuelle Jahr. Die
Differenz beträgt also 1 Tag und im Schaltjahr 2 Tage.
Deshalb wird beim Wochentag
–1 gerechnet, jedoch bei der Modulo-Division
+7 –1 ergänzt, um negative Zahl
zu vermeiden. Hier wird zusätzlich bei Schaltjahr VSJ subtrahiert.
7) Tag-Nr.
und Datum aus einer Kalenderwoche berechnen
Das Ergebnis ist zunächst die Tag-Nummer im Jahr und muss in Tag und Monat umgeformt werden.
Woche 1
ist die Woche, in der der 4. Januar liegt. Der 1. bis 3. Januar kann in Woche
52 oder 53 des Vorjahres liegen.
Entsprechend
können Dezembertage in Woche 1 des Folgejahres liegen.
Bei Wochennummer 52 bzw. 53 am Anfang des Jahres muss das Vorjahr eingesetzt werden.
Bei Wochenummer 1 am Ende des Jahres muss das Folgejahr eingesetzt werden.
7.1) Tag-Nr. bzw. Datum vom Wochenanfang einer Kalenderwoche (Montag)
TagNr = WoNr
*7 – 3 – (( 5 * year +7) / 4) MOD 7 ' year
2-stellig für 2000 bis 2099
TagNr = WoNr *7 – 3 – (( 5 * Jahr
+3) / 4) MOD 7 ' Jahr 4-stellig für 2000 bis
2099
7.2) Allgemein für alle Wochentage (WoTag 0 bis 6 = So, Mo, Di, Mi, Do, Fr, Sa)
TagNr = WoNr *7 – 3 + (WoTag +6) MOD 7 – (( 5 * Jahr +3) /
4) MOD 7 ' Jahr 4-stellig für 2000 bis 2099
Schaltjahr SJ wie oben, Jx = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Jahr 4-stellig ab 1583 (gregorianisch)
TagNr = WoNr *7 – 3 + (WoTag +6) MOD 7 – (2 + Jx – SJ) MOD 7
' Jahr 4-stellig für alle Jahrhunderte
Aus der TagNr kann das Datum (Tag und Monat) gebildet werden. Formeln siehe oben.
8) Wochentag
eines Datums berechnen (DOW)
Der Wochentag eines Datums z.B. 1. Januar gleitet jedes Jahr 1 Tag weiter jedoch nach einem Schaltjahr 2 Tage.
Dadurch liegen die 7 Wochentage wegen der Schaltjahre im 4-Jahresrhythmus alle 28 Jahre auf demselben Datum (innerhalb eines Jahrhunderts).
8.1) Wochentag mit der Tag-Nummer des Jahres berechnen
SJ = 1 / (1+Jahr MOD 4) – 1 / (1+Jahr MOD 100) + 1 / (1+Jahr MOD 400) ' Schaltjahr (SJ) = 1 , sonst = 0
TagNr = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30 ' Tagnummer im Jahr (andere Formeln, siehe 3.)
(1) Allgemein für alle Jahrhunderte (ab 1.1.1583, (Gregorianischer Kalender) mit Osterkennzahl E (Osterberechnung E siehe unten)
WoTag = (TagNr + 152 – E –
SJ) MOD 7 ' Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
WoTag = (TagNr + 6 * E – 2 – SJ) MOD 7 'alternativ
Ed = E MOD 7 WoTag = (TagNr + 12 – Ed – SJ) MOD 7 ' alternativ mit Osterkennziffer Ed
(2) Allgemein für alle Jahrhunderte (ab 15.10.1582, Gregorianischer Kalender)
Jx = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Wochentag 31.12. Jahr (4-stellig)
WoTag = ( Jx + TagNr – 1 – SJ ) MOD 7 ' Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
TagKW = ( Jx + TagNr – 2 – SJ ) MOD 7 + 1 ' Tag 1 bis 7 ( Mo, Di, Mi, Do, Fr, Sa, So)
Erläuterung zu (1) (2): Der Wochentag ist im Schaltjahr in der Tagnummer ab 29. Februar bereits erhöht enthalten.
Jx ist immer der Wochentag vom 31. Dezember. Die Tag-Nr ist 365. Da 365 MOD 7 = 1 ergibt, steht in der Formel Tag-Nr –1 .
Wochentag vom 1.1. ist gleich Wochentag vom 31.12. minus SJ (Jx – SJ). Ebenfalls hat Ostern (Sonntag) den Bezug auf 1.1. minus SJ.
(3) Tag (0 bis 6) der Woche (Jahr 2000 bis 2099)
DOW = (year + (year +23) / 4 + TagNr ) MOD 7 ' Tag 0 bis 6 (year 2-stellig)
oder mathematisch umgeformt: DOW = ((5*year +23) / 4 + TagNr ) MOD 7
(4) Tag (0 bis 6) der Woche (Jahr 1901 bis 2099)
DOW = (Jahr + (Jahr +19) / 4 + TagNr ) MOD 7 ' Tag 0 bis 6 (Jahr 4-stellig)
(5) Tag (1 bis 7) der Kalenderwoche (Jahr 2000 bis 2099)
TagKW = (year + (year +19) / 4 + TagNr ) MOD 7 + 1 ' Tag 1 bis 7 (year 2-stellig)
(6) Tag (1 bis 7) der Kalenderwoche (Jahr 1901 bis 2099)
TagKW = (Jahr + (Jahr +15) / 4 + TagNr ) MOD 7 + 1 ' Tag 1 bis 7 (Jahr 4-stellig)
8.2) Wochentag mit dem Datum (Tag, Monat, Jahr) berechnen
(1) Wochentag
berechnen mit Osterkennzahl E Allgemein für alle Jahrhunderte (ab 1583)
(1.1) Monatswert m anstelle Monat und Osterkennzahl E anstelle Jahr
Weihnachten, Silvester und niederl. Königinnentag hängen direkt nicht an Ostern. Warum kann man die Wochentage trotzdem auf diese Weise errechnen?
Mit der Osterkennzahl eines Jahres ist Wochentag Sonntag und Datum gekoppelt.
Deshalb kann man mit meiner Osterkennzahl eines Jahres den Wochentag eines beliebigen Datums und Feiertage z.B. Heiligabend bestimmen.
Dabei ist das Jahr beliebig, weil es schon
in der Osterkennzahl berücksichtigt wurde. Ebenso sind Schaltjahre bereits
enthalten und müssen nur bei Januar / Februar beachtet werden.
Deshalb
sind diese Formeln sehr einfach, z.B. WoTag = 6 – E MOD 7 ' Wochentag Heiligabend 24.12.
oder WoTag = 6 * E MOD 7 ' Wochentag 25.12.
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
m = (13 *
Monat +3) / 5 + (12 – Monat) / 10 *
(Monat +1 – SJ) ' Monatswert mit
Korrektur für Januar/Februar
WoTag = (Tag + m + 6 * E ) MOD 7 ' Wochentag für beliebiges Datum (gregorianisch)
WoTag = (Tag + m + 6 * Ed ) MOD 7 ' alternative Formel mit der Osterkennziffer Ed
Bei meiner Lösung ist vorteilhaft, dass das Schaltjahr bereits in der Osterkennzahl E ab März enthalten ist.
Anstelle der Formeln können auch die Werte aus den folgenden Tabellen eingesetzt werden und Vielfaches von 7 abgezogen werden (z.B. 15 MOD 7 = 1 MOD 7).
Beispiel:
Wochentag 25.12.2012 = (25 + 3 + 6 * 5) MOD 7 = 58 MOD 7 = 2
(Dienstag), weil (25+3) MOD 7 = 0 gilt 6*E MOD 7 bzw. 6*Ed MOD 7 für jedes Jahr 25.12.
Tabellenwert m
je Monat in Klammern, die
Werte sind mit MOD 7 reduziert und können statt der obigen Berechnung von m genutzt
werden:
Jan (5 bzw.
4), Feb (1 bzw. 0), März (1), Apr (4), Mai (6),
Juni (2), Juli (4), Aug (0), Sept (3), Okt (5),
Nov (1), Dez (3)
bei Januar / Februar gilt der
zweite Wert für Schaltjahre ( wegen minus SJ)
Für E kann
auch
Osterkennziffer Ed = E MOD 7
(Rest nach Division durch 7) eingesetzt werden. Sie beträgt für
2008 (3), 2009 (2), 2010 (1),
2011 (0),.2012 (5), 2013 (4), 2014 (3), 2015 (2),
2016 (0), 2017 (6), 2018 (5), 2019 (4), 2020 (2),...
Die Osterkennziffer Ed folgt einem
Gesetz –1 von Jahr zu Jahr und
im Schaltjahr –2 . Wird die Zahl negativ, muss 7 addiert werden z.B.
2011 auf Schaltjahr 2012 (0 –2 +7 = 5).
(1.2) Monatswert KT
anstelle Monat und Osterkennzahl E
anstelle Jahr
ist
eine weitere Möglichkeit zur Berechnung des Wochentages.
Weil
die Monatslängen kein Vielfaches der Woche sind, wird hier ein Monatswert für
die Korrektur der Tage KT benutzt.
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
M = 1 + (Monat + 9) MOD 12 ' Monat gewandelt in März = 1 bis Februar = 12
KT = M * 31 /
12 – M / 11 * (1 + SJ) ' Korrektur Tag je nach
Monat mit
Korrektur für Januar/Februar
WoTag = 6 – ( E – Tag – KT ) MOD 7 ' Wochentag für beliebiges Datum (gregorianisch) mit der Osterkennzahl E statt Jahr.
WoTag = 6 – (42 + Ed – Tag – KT ) MOD 7 ' alternative Formel mit der Osterkennziffer Ed
WoTag = (6 * E + Tag – 1 + KT) MOD 7 ' alternative Formel, Wochentag für beliebiges Datum
WoTag = (6 * Ed + Tag – 1 + KT) MOD 7 ' alternativ wird hier die Osterkennziffer Ed = E MOD 7 eingesetzt.
Beispiel Nikolaus 6.12.2012:
M = 1+(12+9) MOD 12 =1+9 = 10 für Dezember,
KT = 10*31/12= 310/12 = 25, (Osterkennzahl E = 131 für 2012, Berechnung siehe unten)
WoTag = 6 – ( E – Tag – KT ) MOD 7 = 6 – (131 –6 –25) MOD 7 = 6 –2 = 4 (= Donnerstag)
Tabellenwert
je Monat, KT in Klammern, die
Werte sind mit MOD 7 reduziert und können statt der obigen Berechnung genutzt
werden:
Jan (6 bzw.
5), Feb (2 bzw. 1), März (2), Apr (5), Mai (0),
Juni (3), Juli (5), Aug (1), Sept (4), Okt (6),
Nov (2), Dez (4)
bei Januar / Februar gilt der zweite Wert für Schaltjahre
( wegen minus SJ)
Hinweis: Bei gleichen Werten je Monat sind die Wochentage
der Monate gleich, z.B. Wochentag 1. März = 1. November
Erläuterung zu dieser Berechnung von KT:
M = 1 + (Monat + 9) MOD 12 ' Monat gewandelt in März = 1 bis Februar = 12
KT = M * 31 /
12 – M / 11 * (1 + SJ) ' Korrektur Tag je nach
Monat mit
Korrektur für Januar/Februar
Alternativ
KT = M * 31 / 12 + M /
11 * (6 – SJ)
Die Monate werden in März = 1 usw. gewandelt. Januar
und Februar liegen hier als Monat 11 und 12
nach Dezember.
Für Januar und Februar erfolgt durch M / 11 die Korrektur –1. Dies entspricht der Berechnung mit dem Vorjahr.
Das
Schaltjahr ist erst ab März wirksam, deshalb wird KT nur im Januar und Februar
im Schaltjahr um einen weiteren Tag reduziert.
Andere Formel zur Berechnung von KT
KJF = (12 – Monat) / 10 * (Monat + 1 – SJ) ' Korrektur Januar , Februar (Schaltjahr)
KT = (13 * Monat +8) / 5 + KJF ' Korrektur Tag je nach Monat
Erläuterung zu dieser Berechnung von KT:
Durch (12 – Monat) / 10 wird für Januar und
Februar Korrektur + 2 bzw. +3 wirksam.
Das
Schaltjahr ist erst ab März wirksam, deshalb wird KT nur im Januar und Februar
im Schaltjahr um einen weiteren Tag reduziert.
Weitere Formel zur Berechnung von KT
KT = (Monat –2 + (12 – Monat) / 10 * (9 – 3 * SJ)) * 31 / 12 ' Korrektur Tag je nach Monat
Erläuterung zu dieser Berechnung von KT:
Die Korrektur Tag je nach Monat KT wird hier mit
einer Formel berechnet, die die passenden Werte von anderen Monaten für Januar / Februar benutzt.
Durch Monat –2 wird die Rechengröße z.B. für
Dezember = 10 und Januar wird zu 1 –2 +9 = 8 (=Oktober) korrigiert.
KT MOD 7 = 8
*31/12 MOD 7 = 20 MOD 7 = 6 (vergleiche
Tabelle mit den Werten KT MOD 7)
Damit erhält man für Januar (statt 0) den Wert von
Oktober (KT=6). Bei Februar (statt 3) bekommt man der Wert von November (KT=2).
Im
Schaltjahr wird der Monat zusätzlich mit
–3 *SJ
korrigiert und man erhält die Werte von Juli und August, die
nochmals –1 kleiner sind.
(2) Wochentag
mit Jahr berechnen Allgemein
für alle Jahrhunderte
als Tag 0 bis 6 (So, Mo, Di, Mi, Do,
Fr, Sa)
WoTag = ( Tag + KT + Jahr + Jahr / 4 – Jahr/100 + Jahr / 400 ) MOD 7 ' Wochentag für Datum (gregorianisch ab 15.10.1582)
WoTag = ( Tag + KT + Jahr + Jahr / 4 – 2 ) MOD 7 ' Wochentag für Datum (julianisch)
KT siehe bei (1). Bei meiner Lösung ist vorteilhaft, dass das Jahr bei Januar und Februar nicht das Vorjahr sein muss. Die Korrektur ist in KT enthalten.
(3) Wochentag am Anfang und Ende des Jahres Jahr 4-stellig ab 1583 (gregorianisch)
31. 12. WoTag = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Wochentag vom 31. Dezember
1. 1. WoTag = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400 – SJ ) MOD 7 ' Wochentag vom 1. Januar
Schaltjahrkennung SJ siehe oben. Der 1.1. und 31.12. haben denselben Wochentag außer in Schaltjahren.
(4) Wochentag
vom Monatsende
Die folgenden Formeln entstanden, indem Tag = 0 und der Folgemonat (Monat +1) in obige Formeln eingesetzt wurden.
ML = (13 *
Monat + 16) / 5 + 1 / Monat *
(3 – SJ) '
Monatswert mit Korrektur Januar
LetzterWoTag = (ML + 6 * E) MOD 7 ' Letzter Wochentag für beliebigen Monat (gregorianisch)
alternativ
ME = 1 + (Monat + 10) MOD 12
KTL = ME * 31 / 12 – ME / 11 * (1 + SJ) ' Korrektur Tag für letzten Wochentag im Monat
mit Osterkennzahl LetzterWoTag = 6 – ( E – KTL ) MOD 7 ' Letzter Wochentag für beliebigen Monat (gregorianisch)
mit Jahr LetzterWoTag = ( KTL + Jahr + Jahr / 4 – Jahr/100 + Jahr / 400 ) MOD 7 ' Letzter Wochentag für beliebigen Monat (gregorianisch
Letzter Sonntag im Monat usw. siehe weiter unten.
(5) Weitere
Lösung: Wochentag mit Jahr berechnen, allgemein für alle Jahrhunderte (Tag 0 bis 6, So, Mo, Di, Mi, Do, Fr, Sa)
Das Schaltjahr ist ein Problem, weil es im Januar und Februar nicht wirksam ist, sondern erst ab März. Hierfür wird eine Unterscheidung gebraucht.
JF = 3 / (Monat +1) ' Schalter Jan Feb = 1, sonst = 0
RJ = Jahr – JF ' Rechenjahr ist Vorjahr bei Jan Feb, sonst Jahr
Üblich wird für die Monatsanfänge eine Tabelle benutzt. Einfacher sind meine Formeln:
n = Monat + JF * 12 ' Für Januar, Februar wird Monat 13, 14 gebildet
MK = (13 * n + 8) / 5 ' Monats-Konstante errechnen, (MK MOD 7 wäre der Tabellenwert je Monat)
Tabellenwert
je Monat MK in Klammern:
Jan (0), Feb (3), März (2), Apr (5), Mai (0), Juni (3), Juli (5), Aug (1), Sept (4), Okt (6), Nov (2), Dez (4)
Oder einfacher mit meinen anderen Formeln:
RJ = Jahr – (14 – Monat) / 12 ' Rechenjahr ist Vorjahr bei Jan Feb, sonst Jahr
MK = (1 + (Monat + 9) MOD 12) * 31 / 12 ' Monats-Konstante errechnen
1+(Monat + 9) MOD 12 wandelt die Monatszahl: März (= Monat 1) bis Februar (= Monat 12).
Wie in alten Zeiten stimmen Name und Zahl überein:
September =7, Oktober =8, November =9 und Dezember =10.
Gregorianischer Kalender: Die folgende Formel gilt für das Datum ab 15.10.1582, wenn der neue Kalender in dem Land gültig war.
WoTag = (Tag + MK + RJ + RJ / 4 – RJ / 100 + RJ / 400 ) MOD 7 ' Wochentag bei Datum Gregorianisch
Julianischer Kalender: Die folgende Formel gilt immer für Datum vor 15.10.1582 und weiterhin für Datum nach Julianischem Kalender.
WoTag = (Tag + MK + RJ + RJ / 4 – 2 ) MOD 7 ' Wochentag bei Datum Julianisch
(6) Wochentag
vom Monatsende (zu Formel 5)
Die folgenden Formeln entstehen, indem Tag = 0 und der Folgemonat (Monat +1) in obige Formeln eingesetzt werden.
MKL = (1 + (Monat + 10) MOD 12) * 31 / 12 ' Monats-Konstante für Monatsende errechnen
LetzterWoTag = ( MKL + RJ + RJ / 4 – RJ / 100 + RJ / 400 ) MOD 7 ' Letzter Wochentag für beliebigen Monat (gregorianisch)
(7) Beispiele Wochentag berechnen mit Formeln (5)
Bei der Umstellung vom Julianischen auf Gregorianischen Kalender folgte auf Donnerstag, 4.10.1582 der Freitag, 15.10.1582.
Die
Wochentagsfolge blieb damals erhalten. Fälschlicherweise wird oft behauptet,
dass Tage mit Datum 5.10. bis 14.10.1582 nicht existieren. Tatsächlich gehören
diese Tage zum Julianischen Kalender.
Galileo wurde am 18.2.1564 (Julianisch) geboren und starb am 8.1.1642 (gregorianisch). Nach Julianischem Kalender starb er im Jahre 1641, weil damals die Differenz zwischen den Kalendern 10 Tage betrug.
Beispiel 1: Galileo musste am 22.6.1633 (Datum nach 1582, also Gregorianischer Kalender) der Tatsache abschwören, dass sich die Erde um die Sonne dreht.
MK = (13* 6 +8) / 5 = 86 / 5 = 17 (Ganzzahl)
WoTag = (22 + 17 + 1633 + 1633/4 –1633/100 + 1633/400 ) MOD 7
= (22+17+1633+ 408 – 16 + 4) MOD 7 = 2062 MOD 7 = 3 ' Es war Mittwoch 22.6.1633.
An diesem Tag rettete er sich mit der Notlüge vor Folter und Tod. „Und sie dreht sich doch“ wird er gedacht haben. 360 Jahre später 1992 wurde er rehabilitiert und hat endgültig gesiegt.
Beispiel 2: Reformator Dr. Martin Luther, Anschlag der 95 Thesen an die Tür der Schlosskirche in Wittenberg am 31.10.1517 (Datum vor 1582, also Julianischer Kalender).
MK = (13*10+8)/5 = 138 /5 = 27 (Ganzzahl)
WoTag = ( 31 + 27 +1517 +1517 / 4 – 2 ) MOD 7 = 1952 MOD 7 = 6 ' Es war Samstag 31.10.1517
Wie andere Festtage z.B. 24.12. sind Allerheiligen und Reformationstag an das Datum gekoppelt unabhängig vom Julianischen oder Gregorianischen Kalender.
(8) Weitere einfache Berechnung des Wochentags aus Tag, Monat und Jahr für alle Jahrhunderte
JF = 3 / (Monat +1) ' Schalter Jan Feb = 1, sonst = 0
JF = (14 – Monat) / 12 ' andere Möglichkeit für Schalter Jan Feb = 1,
RJ = Jahr – JF ' Rechenjahr ist Vorjahr bei Jan Feb, sonst Jahr
MK = (1 + (Monat + 9) MOD 12) * 31 / 12 ' Monats-Konstante errechnen
MK = (13 * Monat + 8) / 5 + JF * (Monat +2) ' Alternative
MK = (Monat – 2) *31 / 12 +JF * (Monat +1) ' Alternative
MK = (Monat – 2 + 12*JF) *31 / 12 ' Alternative
MK = (13 * (Monat + 12*JF) +8) / 5 ' Alternative
WoTag = (Tag + MK + RJ + RJ/4 – RJ/100 + RJ/400 ) MOD 7 ' Wochentag 0 bis 6 bei Datum Gregorianisch
WoTag = (Tag + MK + RJ + RJ / 4 – 2 ) MOD 7 ' Wochentag 0 bis 6 bei Datum Julianisch
(9) Beispiel für Kalender-Wochentag 1 bis 7 (Montag bis Sonntag)
MK = (13
* (Monat + 12*JF) + 3) / 5 ' Monatskonstante ist um 1
vermindert
TagKW = (Tag + MK + RJ + RJ/4 – RJ/100 + RJ/400 ) MOD 7 +1 ' Wochentag 1 bis 7 bei Datum Gregorianisch
TagKW = (Tag + MK + RJ + RJ / 4 – 2 ) MOD 7 +1 ' Wochentag 1 bis 7 bei Datum Julianisch
(10)
Umrechnen vom Julianischen zum Gregorianischen Datum
(und umgekehrt), Berechnen der Differenz
Für Datum vor 15.10.1582 gilt immer der Julianische Kalender, aber auch für spätere Daten, soweit in Ländern der Gregorianische Kalender später gültig wurde.
Die Schaltjahrregel wurde damals geändert, wodurch das Datum der beiden Kalender vom 1.3. 200 bis 28.2. 300 identisch blieb, jedoch davor und danach über die Jahrhunderte immer mehr von einander abweicht.
Tagesdifferenz = Jahr / 100 – Jahr / 400 – 2 muss zum
Julianischen Datum addiert werden, um das Gregorianische Datum zu erhalten.
Rechenjahr RJ (siehe oben) ist für Datum im Januar / Februar das Vorjahr (= Jahr –1). Erreicht das errechnete Datum März, dann wird mit dem aktuellen Jahr gerechnet.
Dies wirkt sich nur am Anfang eines Jahrhunderts aus (z.B. RJ = 1899 für Datum bis 28.2.1900).
Tagesdifferenz = RJ / 100 – RJ / 400 – 2
Einfache Formeln erhält man durch mathematisches Umformen.
Auch hier muss Anfang des Jahrhunderts beachtet werden (z.B. 1899 für Datum bis 28.2.1900).
Für die Jahrhundertzahl gilt HZ = Jahr / 100 (z.B. für 1983 ist HZ =19):
Tagesdifferenz
= (3 * HZ +3) / 4 – 2
Für das Jahrhundert gilt JH = 1 + Jahr / 100 (z.B. 1983 liegt im 20. Jahrhundert, JH = 20)
Tagesdifferenz = 3 * JH / 4 – 2
Beispiel: In Russland galt der Julianische Kalender bis 1918. Die vom deutschen Kaiser finanzierte Oktoberrevolution in Russland begann am 25.10.1917 (Mittwoch).
Tagesdifferenz = 1917 / 100 – 1917 / 400 – 2 = 19 – 4 – 2 = 13 Tage
oder mit Jahrhundertzahl 1917 / 100 = 19 ergibt Tagesdifferenz = (3*19 +3) / 4 –2 = 13
oder mit 20. Jahrhundert 1917 / 100 + 1 = 20 ergibt Tagesdifferenz = 3*20 / 4 –2 = 13
Tag = 25 + 13 = 38. Wegen der Monatsüberschreitung werden 31 Tage für Oktober abgezogen 38 – 31 = 7 und der Monat erhöht.
In Deutschland datiert dieses Ereignis auf den 7.11.1917 des gregorianischen Kalenders (Mittwoch). Geändert hat sich nur das Datum; der Wochetag bleibt bestehen.
Geschichtsdaten wie der 30-jährige Krieg 1618 bis 1648 werden nach dem heute gültigen gregorianischen Kalender datiert, obwohl viele der Krieg führenden Länder den Julianischen Kalender benutzten.
9) Osterdatum und bewegliche Feiertage
berechnen
Ostern ist ein beweglicher Feiertag. Tag und Monat also das Datum im Jahr wird hier mit Formeln errechnet.
Achtung, hier müssen
Ganzzahl-Division (Kommastellen fallen weg) und Divisions-Rest (MOD) angewendet
werden, z.B. 2009 MOD 19 = 14 bedeutet
2009 / 19 = Rest 14.
Ausgehend von verschiedenen Lösungen (unbekannter Autor 1876, Butcher , Carter, Oudin, Gauss, Dr. Lichtenberg) habe ich einen einfachen Rechengang (siehe 9.4) Einfache Berechnung für Ostersonntag) für die Jahre 1900 bis 2199 (gregorianischer Kalender) gebildet. Anschließend habe ich auch meinen allgemeinen Algorithmus für alle Jahrhunderte angefügt und bis zum Jahr 25599 getestet.
Vorteilhaft ist dabei der errechnete Bezugswert für alle Ostertermine. Mit dieser Osterkennzahl wird direkt Ostertag und Monat berechnet.
Mit der Osterkennzahl wird auch sehr einfach das jeweilige Datum (Tag und Monat) der anderen variablen Feiertage einschließlich Buß- und Bettag, Advent, Muttertag und sogar die Sommerzeit bestimmt.
Auch der Wochentag von Weihnachten, Silvester, usw. kann damit sehr einfach errechnet werden.
Diese Berechnungsmethode ist vorteilhaft, weil Schaltjahre
bereits in der Osterberechnung enthalten sind.
9.1) Osterkennzahl E
mit dem Jahrestag von Ostersamstag errechnen
Tag mit
Osterkennzahl = 1 ist der 1. Dezember des Vorjahres auch bei Schaltjahren.
Die Osterkennzahl E ist der Jahrestag von Ostersamstag plus 31 Tage plus 3 bzw. 2 Tage wegen Februar (evt. Schaltjahr SJ).
Osterkennzahl E = TagNr. + 34 – SJ
Beispiel: Ostersonntag ist der 24.4. 2011. Ostersamstag 23.4. hat die Tag-Nummer 113. (Kontrolle: Januar 31 + Februar 28 + März 31 + April 23 = 113)
Osterkennzahl E = 113 +34 = 147 für das Jahr 2011. Schaltjahr entfällt im Jahr 2011.
9.2) Osterberechnung
umformen in Datum Ostersonntag und
Monat Osterkennzahl E errechnen
Andere Osterberechnungen z.B. nach Gauß liefern als Ergebnis das Märzdatum beispielsweise Z = 32 statt eines Datums bestehend aus Tag und Monat. Es muss noch umgeformt werden.
Die Zahl Z = 32 für den 1. April ergibt mit 32 MOD 31 = 1 nur scheinbar ein Ergebnis, denn 31 MOD 31 = 0 für den 31. März wäre falsch.
Deshalb wird umgeformt: Z MOD 31 = 0 bis 30 wird zu (Z – 1) MOD 31 + 1 = 1 bis 31
Nun stimmt der Tag für 31. März (31–1) MOD 31 +1 = 31 und bei Z = 32 für 1. April bleibt das richtige Tagesdatum bestehen (32 –1) MOD 31 +1 = 1
Jetzt fehlt noch die Berechnung des Monats. Für 22. bis 31. März ergibt Z / 31 = 0 und für 1. April (Z = 32) ergibt Z / 31 = 1. Man braucht also nur 3 addieren und erhält 3 bzw. 4 für März / April.
Besser ist bei Z (hier Z = 22) ein Vielfaches des Divisors (3*31= 93) beizufügen ohne das Ergebnis bei Modulo 31 zu verändern: (22 –1 + 93) MOD 31 +1 = 22
Nun ergibt die Ganzzahldivision die richtige Monatszahl (22 –1 +93) / 31 = 3 für Ostern am 22. März sowie (32 –1 + 93) / 31= 4 für Ostern am 1. April.
Das Ergebnis einer Osterberechnung (z.B. nach Gauß) nenne ich hier Märzdatum Z. Daraus wird meine Osterkennzahl E = Z + 92 gebildet und hierauf beruhen die einfachen Formeln:
Ostersonntag = 1 + E
MOD 31 Ostermonat = E /
31
Datum Totensonntag im November Tag = 20 + E MOD 7 oder Wochentag Heiligabend WoTag = 6 – E MOD 7
Mit dieser Osterkennzahl E können die Termine anderer beweglicher Feiertage z.B. Pfingsten und sogar Advent, Weihnachten und vieles mehr nach meiner Methode ebenfalls sehr einfach berechnet werden.
9.3) Osterkennzahl
E mit bekanntem Osterdatum errechnen
Falls das Osterdatum in einer Anwendung bekannt ist, kann die Osterkennzahl aus dem Datum errechnet werden.
Schaltjahre sind in der Osterkennzahl bereits berücksichtigt. Andere Festtage und Sondertage sind einfach zu berechnen
Für Tag = Ostersonntag sowie Monat = Ostermonat ist die Osterkennzahl E = (Tag –1) + Monat * 31
Beispiel: Ostern am 8.4.2012 ergibt Osterkennzahl E = (8 –1) + 4 * 31 = 131
Anwendung für beweglichen Feiertag: Tag = 16 + E MOD 7 ist der Buß- und Bettag, Tag = 16 + 5 = 21. November 2012
9.4)
Einfache
Berechnung für Ostersonntag (hier wird die
Osterkennzahl direkt mit Jahr berechnet)
JAHR
(4-stellig) 1900 bis 2099 mit Ergänzung bis 2199
A = ( 204
– JAHR MOD 19 *11 ) MOD 30 ' (Jahr 4-stellig)
B = 120 + A – A / 27 '
mit Ergänzung für Jahre 1954, 1981,
2049 und 2076
C = ( B + JAHR * 5 / 4 – JAHR / 2100 ) MOD 7 ' mit Ergänzung
gültig bis 2199
E = B – C ' E Osterkennzahl (Easter
index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
Wert A kann auch entsprechend Gauß berechnet werden
A = ( JAHR MOD
19 *19
+ 24 ) MOD 30 ' (Jahr 4-stellig)
Wert C kann auch mit der Jahrhundertregel der Schaltjahre
erweitert werden
C = ( B + JAHR * 5 / 4 – JAHR / 100 +Jahr /
400 + 1 ) MOD 7 '. Ergänzung gültig für 1894 bis 2203
9.5) Beispiel Jahr 2013
A
= ( 204 – JAHR MOD 19 *11 ) MOD 30 2013 MOD 19 = 18 '
Rest von Division 2013 / 19
A = ( 204 – 18
*11 ) MOD 30 = (204 – 198) MOD 30 = 6 ' Rest von Division 6 / 30
B = 120 + A – A / 27
B = 120 + 6 –
6 /27 = 126
C = ( B + JAHR * 5 / 4 ) MOD 7 2013 *5 / 4 = 2516
C = ( 126 + 2516) MOD 7 =
3
E = B – C = 126 – 3 = 123 ' E Osterkennzahl für 2013
Tag
= 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Tag = 1+ 123
MOD 31 = 1+ 30 = 31
Monat
= E / 31 ' Ostermonat (Monat)
Monat = 123
/ 31 = 3 Ostersonntag ist am
31.3.2013
9.6)
Der
früheste Ostertermin
kann mit den Formeln bestimmt werden. In obiger Formel kann A durch MOD 30 minimal = 0 werden.
B = 120
+ A ' = 120
und C muss den größtmöglichen Wert annehmen. Der kann durch MOD 7
maximal =6 sein.
C = ( B + JAHR * 5 / 4) MOD 7 ' = 6
E = B – C ' E Osterkennzahl niedrigster Wert 120 – 6 = 114
Tag = 1+ E MOD 31 '
frühester Ostersonntag (Datum Tag) =
1 + 114 MOD 31 = 1 + 21 = 22. März
Anmerkung:
Den frühest möglichen Ostertermin gibt es in diesem Jahrhundert nicht.
Frühester Termin ist am 23.3.2008.
9.7)
Der
späteste Ostertermin
Der Wert A kann durch MOD 30 maximal = 29 betragen. C kann minimal
= 0 sein.
B = 120 + 29 –29 /27 = 120 +29 –1 = 148
E = B – C ' E Osterkennzahl höchster Wert 148 – 0 = 148
Tag = 1+ E MOD 31 '
spätester Ostersonntag (Datum Tag) =
1 + 148 MOD 31 = 1 + 24 = 25. April
Anmerkung:
Der späteste Ostertermin in diesem Jahrhundert ist am 25.4.2038
9.8) Berechnung Ostern Julianischer
Kalender
(1) JAHR
(4-stellig) bis 1582. Die Berechnung ist auch ab 1583 gültig, wenn der
Julianische Kalender gültig blieb.
z.B. für Griechenland gültig bis 1922, ab1923 siehe (2).
H = Jahr MOD 19
' Mondparameter (H +1=
Goldene Zahl)
A = (15 + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
C = (A + Jahr + Jahr / 4 ) MOD 7
' Wochentag zu A = Abstand zu Sonntag davor
E = 120 + A – C ' E Osterkennzahl (Easter index)
Tag = 1+ E MOD 31 ' Julianischer Ostersonntag
(Datum Tag)
Monat = E / 31 ' Ostermonat (März oder April)
Wert =
28 + A – C ' alternativ Ostersonntag als Märzdatum (21+A
+7 – C)
Monat = 3 + Wert / 32 ' Ostermonat (März oder April)
Tag = Wert MOD 32 + Monat / 4 ' Ostersonntag
(2) JAHR
(4-stellig) Orthodoxer
Ostertermin (z.B. gilt in
Griechenland ab 1923 der gregorianische Kalender).
Ostern wird julianisch berechnet, aber das Datum wird gregorianisch angegeben.
k = Jahr / 100 – Jahr /
400 –2 ' k
ist Differenz in Tagen, Julianischer und gregorianischer Kalender
H = Jahr MOD 19
' Mondparameter (H +1=
Goldene Zahl)
A = (15 + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond (julianisch)
C = (A + Jahr + Jahr / 4 ) MOD
7 ' Wochentag zu A (Julianisch) (21 MOD 7 = 0)
B = 120 + A + k
– C ' Jahrestag (gregorianisch), Erläuterung
siehe unten
E = B + B / 154
' E Osterkennzahl (Easter
index) , (B/154 überspringt fehlenden 31.4.)
Tag = 1+ E MOD 31 ' Orthodoxer Ostersonntag
(Datum Tag)
Monat = E / 31 ' Ostermonat (April
oder Mai)
Wert =
28 + A + k – C '
alternativ Ostersonntag als Märzdatum (- März 31, - April 30 Tage)
Monat = 3 + Wert / 31 ' Ostermonat (April oder Mai)
Tag = Wert MOD 31 + Monat / 5 ' Ostersonntag
Erläuterung zu meiner Osterformel (siehe auch Erläuterung bei den nächsten
Algorithmen):
Der Wochentag blieb bei der
gregorianischen Reform gleich.
Mit der Tagesdifferenz k zwischen den
beiden Kalendern (anfangs 10 zur Zeit 13 Tage) verschiebt sich nur das Datum.
In die julianische Wochentagsformel (siehe
8.2) WoTag = (
Tag + KT + Jahr + Jahr / 4 – 2 )
MOD 7 wird KT = 2 für März eingesetzt.
Frühester
Ostersonntag ist 22. März + 10 Tage minimale Differenz gregorianisch- julianisch
= 32. März, d.h. –31 Tage für März = 1. April.
9.9)
Gregorianischer
Kalender für alle Jahrhunderte
JAHR (4-stellig) ab 1583
... bzw. 5-stellig (255 Jahrhunderte getestet)
k = Jahr / 100 – Jahr /
400 –1 ' k –1 ist Differenz in Tagen, Julianischer
und gregorianischer Kalender (Schaltregel)
M = 16 + k – (Jahr /
100 * 8 +13) / 25 ' M säkulare Mondschaltung
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (M + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
T = (A + H / 11) / 29 '
Osterregel Osterausnahmen z.B. Jahre
1954, 1981, 2049, 2076, ....
B = 120 + A – T ' Osterkennzahl 120 entspricht 27. März =
spätester 1. Samstag ab 21. März.
C = ( B +
Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag
zu B +1 ist der Abstand zu Samstag davor.
E = B – C ' E Osterkennzahl (Easter
index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum
Tag)
Monat = E / 31 ' Ostermonat (Monat)
Alternativ kann auch die Formel C = (B + 5 * Jahr / 4 – k ) MOD 7
benutzt werden.
Je nach System wird aber bei 5 * Jahr der zulässige Zahlenraum z.B. 32676
überschritten, dann gilt nur 1583 bis 6553.
Alternativ kann auch M = 16 + k – Jahr / 300 angewendet werden, gültig
für Jahre 1583 bis 4199.
Mondschaltung – Jahr / 300
stammt von Gauss (1800).
Erläuterung zu meiner Osterformel (siehe auch Erläuterung bei den nächsten
Algorithmen):
Ostern ist definiert als der erste Sonntag
ab Vollmond nach Frühlingsanfang (21. März). Abweichend berechnet meine
Methode den Ostersamstag.
Der Grundwert 120
bei B wurde von mir gewählt, um den Ostermonat
März bzw. April bei Division durch 31 zu erhalten, wobei der Rest das
Datum von Ostersamstag (= Karsamstag) ergibt.
Am Ende der Osterberechnung wird 1 Tag
addiert und man erhält das Datum des
Ostersonntags. Dadurch ist das Problem mit Rest gleich Null bei Division
gelöst.
Je nach Jahr liegt ein Samstag auf dem 21.
bis 27. März. Der 27. März wäre spätester Samstag. Hieraus entsteht der
Grundwert = 3*31 + 27 = 120.
Dieser Wert ist der erweiterte Jahrestag
vom 27. März ab 1. Dezember (siehe 8.1 (2), der um A (= Anzahl Tage vom 21.
März bis zum nächsten Vollmond) erhöht wird (= B).
Der späteste Tag bewirkt, dass der
Ostersonntag davor liegt. Dies hat den Vorteil, dass der berechnete Wochentag
zu B abgezogen werden kann.
Bei der Berechnung von C wird der
Wochentag um 1 Tag erhöht, also zusätzlich 1 Tag abgezogen, um Ostersamstag zu
erhalten.
Hier folgt nun die Ableitung der Formel.
In die allgemeine Wochentagsformel mit Jahrestag-Nummer wird der Jahrestag von
B eingesetzt.
WoTag = (TagNr – 1 – SJ + Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Wochentag , allgemeine Wochentagsformel, siehe oben 8.1(2)
B hat die TagNr
= B –31 –3 + SJ '
wegen – 31 Tage Dezember und –
3 Tage Februar, siehe 3(8)
WoTag = (B –31 –3 + SJ – 1 – SJ + Jahr + Jahr / 4 – Jahr / 100 + Jahr /
400) MOD 7 ' dabei entfällt (–31 –3 + SJ – 1 – SJ ) MOD 7 = 0
WoTag = (B + Jahr + Jahr / 4 –
Jahr / 100 + Jahr / 400)
MOD 7 '
Wochentag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
C = ( B +
Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag
0 bis 6, jedoch beginnend mit Sa (6+1) MOD 7 = 0, So = 1 bis Fr = 6.
Mit k = Jahr / 100 – Jahr / 400 –1 ist die Tagesdifferenz um – –1 = +1 erhöht und dadurch wird der
Wochentag C die Anzahl Tage für den Abstand zu Samstag davor.
Bei der Berechnung von M mit k habe ich wegen –1 den Zahlenwert von 15 auf 16 erhöht.
Die Korrektur für M (Jahr / 100 * 8
+13) / 25 findet sich bei Dr.
Gauss (1816).
Der Term für die Ausnahmen der Osterregel T = (A + H /
11) / 29 stammt von Dr. Hermann
Kinkelin (ca. 1870, vgl. Berechnung des Christlichen Osterfestes , Seite 226).
9.10)
Berechnung Ostersonntag für alle Jahrhunderte ab 1583
bis.... (kürzere Variante)
JAHR (4-stellig) ab 1583
... bzw. 5-stellig (255 Jahrhunderte getestet)
k = Jahr / 100 – Jahr /
400 + 195 '
k erhöht, 195 MOD 30 = 15 für M bzw. A,
195 MOD 7 = 6 für C
M = k – (Jahr / 100 * 8 +13) / 25 '
M erhöht, ohne Einfluss bei A wegen 180 MOD 30 = 0
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (M + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
T = (A + H / 11) / 29 '
Osterregel Osterausnahmen z.B. Jahre
1954, 1981, 2049, 2076, ....
B = 120 + A – T ' Osterkennzahl 120 entspricht 27. März =
spätester 1. Samstag ab 21. März.
C = ( B +
Jahr + Jahr / 4 – k ) MOD 7 '
Wochentag zu B +1 ist der Abstand zu
Samstag davor.
E = B – C ' E Osterkennzahl (Easter
index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum
Tag)
Monat = E / 31 ' Ostermonat (Monat)
Weitere Erläuterung zu meinen
Osterformeln:
Im Wert M kann die Zahl 15 vollständig in
k enthalten sein. Dafür wird die Zahl in k auf 195 erhöht.
Hieraus ergibt sich: A = (k + ..) MOD 30 bleibt unverändert
wegen 195 MOD 30 = 15.
In der Wochentagsformel (mit Jahrestagnummer) ergibt C = k MOD 7 = 195 MOD 7 = 6, wegen
-k ergibt – 6 +7 = +1 die notwendige Erhöhung um 1.
9.11)
Berechnung Ostersonntag für alle Jahrhunderte ab 1583 bis....
(hier wird alternativ das Märzdatum berechnet)
JAHR
(4-stellig) ab 1583 ... bzw. 5-stellig (255 Jahrhunderte getestet)
k = Jahr / 100 – Jahr /
400 –2 ' k
ist Differenz in Tagen, Julianischer und gregorianischer Kalender
(Schaltregel)
M = 17 + k – (Jahr /
100 * 8 +13) / 25 ' M säkulare Mondschaltung
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (M + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
T = (A + H / 11) / 29 '
Osterregel Osterausnahmen z.B. Jahre
1954, 1981, 2049, 2076, ....
B = 28 + A – T '
Datum Vollmond + 7 Tage
C = ( B +
Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag
zu B
ist der Abstand zu Sonntag davor.
Wert = B – C '
Ostersonntag als Märzdatum
Monat = 3 + wert / 32 ' Ostermonat (Monat)
Tag = wert MOD 32 + wert / 32 ' Ostersonntag (Datum Tag)
Alternativ kann auch die Osterkennzahl
gebildet werden.
E = 92 + B – C ' E Osterkennzahl (Easter
index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum
Tag)
Monat = E / 31 ' Ostermonat (Monat)
Erläuterung zu dieser Osterformel:
Ostern ist definiert als der erste Sonntag
nach Vollmond ab Frühlingsanfang (21. März) also frühestens 22. März.
Die Anzahl Tage vom 21. März bis zum
nächsten Vollmond ist A, + 21 ist das Datum vom Vollmondtag.
Da Ostersonntag nach dem Vollmondtag
liegen muss, werden 7 Tage addiert (B = 21+7 +A).
Bei der Berechnung des Wochentags vom
Vollmondtag (= C) wirkt sich dies nicht aus, wegen 21 MOD 7 = 28 MOD 7 = 0.
Vorteilhaft ist, dass der berechnete
Wochentag zu B ( C = 0 bis 6 = So bis Sa) direkt abgezogen werden kann, um
Ostersonntag als Märzdatum zu erreichen.
Hier folgt nun die Ableitung der Formel.
In die allgemeine Wochentagsformel wird
das Datum (Tag = B und Monatswert KT = 2 für März) eingesetzt.
WoTag = ( Tag + KT + Jahr + Jahr / 4 – Jahr/100 + Jahr / 400 ) MOD 7 ' Wochentag , allgemeine Wochentagsformel siehe oben 8.2 (2)
WoTag = (B + 2 + Jahr + Jahr / 4 – Jahr / 100 + Jahr /
400) MOD 7 ' Wochentag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
C = ( B +
Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag
= Anzahl Tage für den Abstand zu Sonntag davor.
Mit k = Jahr
/ 100 – Jahr / 400 –2 ist
die Tagesdifferenz um – –2 = +2 erhöht
und ersetzt KT = 2 für März.
Bei der Berechnung von M mit k habe ich
wegen –2 den Zahlenwert von 15 auf 17 erhöht.
Die Differenz Julianischer und
gregorianischer Kalender kann auch umgeformt werden, siehe 8.2 (10):
k = (Jahr / 100 * 3 +3) / 4 – 2
Alternativ kann N = Jahr /
100 in k und M eingesetzt werden.
Weitere Erläuterungen siehe Osterformel davor.
9.12)
Berechnung Ostersonntag für alle Jahrhunderte ab 1583 bis....
(hier eine kürzere Alternative)
JAHR
(4-stellig) ab 1583 ... bzw. 5-stellig (255 Jahrhunderte getestet)
k = Jahr / 100 – Jahr /
400 – 2 ' k
ist Differenz in Tagen, Julianischer und gregorianischer Kalender
(Schaltregel)
M = 17 + k – (Jahr /
100 * 8 +13) / 25 ' M säkulare Mondschaltung
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (M + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
B = A – (A + H / 11) / 29 ' 0. März + Anzahl Tage minus Osterausnahme.
C = ( B +
Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag
zu B
ist der Abstand zu Sonntag davor.
E = 120 + B – C ' E Osterkennzahl (Easter
index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum
Tag)
Monat = E / 31 ' Ostermonat (Monat)
Weitere Erläuterung zu meinen Osterformeln:
Siehe auch Erläuterungen zu obigen
Osterformeln. Der Tag 21. März entfällt in der Formel zur Berechnung des
Wochentags C, wegen 21 MOD 7 = 0.
Der 0. März ist rechnerisch der gleiche
Wochentag wie der 21. oder 28. März und gleich dem 28./29. Februar mit dem
Vorteil, das Schaltjahr zu umgehen.
Mit 0. März entfällt in der
Wochentagsformel der Tag, und der Monatswert 2 für März ist in k enthalten,
siehe 8.2 (2).
9.13)
Berechnung Ostersonntag für alle Jahrhunderte ab 1583 bis....
(weitere kürzere Alternative)
JAHR
(4-stellig) ab 1583 ... bzw. 5-stellig (255 Jahrhunderte getestet)
k = Jahr / 100 – Jahr /
400 + 75 '
k erhöht, 75 MOD 30 = 15 und für C
ergibt –k MOD 7 = -75 MOD 7 = 2
M = k –
(Jahr / 100 * 8 +13) / 25 ' M erhöht, ohne Einfluss bei A wegen 60 MOD 30 = 0
H = Jahr MOD 19 ' Mondparameter (H +1= Goldene Zahl)
A = (M + H *19) MOD 30 ' Anzahl Tage ab 21. März bis Vollmond
B = A – (A + H / 11) / 29 ' 0. März + Anzahl Tage minus Osterausnahme.
C = ( B +
Jahr + Jahr / 4 – k ) MOD 7 ' Wochentag
zu B
ist der Abstand zu Sonntag davor.
E = 120 + B – C ' E Osterkennzahl (Easter
index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum
Tag)
Monat = E / 31 ' Ostermonat (Monat)
Weitere Erläuterung zu meinen
Osterformeln:
Im Wert M kann die Zahl 15 vollständig in
k enthalten sein. Dafür wird die Zahl in k auf
75 erhöht.
Hieraus ergibt sich: A = (k + ..) MOD 30 bleibt unverändert
wegen 75 MOD 30 = 15.
In der Wochentagsformel (mit Datum) ergibt C = k MOD 7 = 75 MOD 7 = 5, wegen
-k ergibt – 5 +7 = +2 die notwendige 2 für Monat März.
9.14) Kürzere Formeln , kleinere Zeiträume
Oben bei 9.4 stehen Algorithmen für die
Jahre 1900 bis 2099 und erweitert bis 2199 sowie ein Bereich 1894 bis 2203.
(1) Hier folgt noch mein getesteter
Algorithmus für 1887 bis 2325
k = Jahr / 100 –Jahr / 400 +195 ' k erhöht, 195 MOD 30 =
15 für M bzw. A, 195 MOD 7 = 6 für C
M = k – Jahr / 300 ' M säkulare Mondschaltung
A = (M + Jahr MOD 19 *19) MOD 30 '
Anzahl Tage ab 21. März bis Vollmond
B = 120 + A – A / 28 ' Osterkennzahl 120 entspricht 27. März =
spätester 1. Samstag ab 21. März.
C = ( B + 5 * Jahr / 4 – k ) MOD 7 ' Wochentag zu B +1 ist der Abstand zu
Samstag davor.
E = B – C ' E Osterkennzahl (Easter
index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum
Tag)
Monat = E / 31 ' Ostermonat (Monat)
(2) Eine Variante meiner Osterberechnung
mit Tabellenzugriff gültig für 1894 bis 2203
A = Jahr MOD 19 ' Zugriff auf Tabellenposition A = 0 bis 18
LookTAB Ostermond,
A, B ' Die
Variable B enthält nun den Wert Märztag (incl. April) +2 aus der Tabelle
C = ( B + Jahr + Jahr / 4 – Jahr / 100 + Jahr
/ 400 ) MOD 7 ' Wochentag Ostermond
E = B – C + 97 ' E Osterkennzahl (Easter
index), Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum
Tag)
Monat = E / 31 ' Ostermonat (Monat)
Die zugehörige Tabelle mit dem Märzdatum
des Ostervollmonds + 2 für KT = 2
(wegen Wochentag März).
B ist dadurch + 2 zu hoch. Dafür erfolgt der Ausgleich 92 – 2
+7 = 97.
Der auf dieses Märzdatum (mit April) folgende
Sonntag ist der Ostersonntag.
Table Ostermond 'Märzdatum mit Verlängerung in den April
47 36 25
44 33 51 41 30
49 38 27 46 35
24 43 32 50 40
29
TABEND
Die Tabellenwerte können auch um 91 erhöht werden wegen 91 MOD 7 =
0, damit würde E = B – C + 6 .
9.15) Berechnung der beweglichen Feiertage mit
festen Abstand zu Ostern (gilt für alle Jahre)
Palmsonntag (-7), Gründonnerstag (-3), Karfreitag (–2), Ostermontag (+1), Dänischer Buß- und Bettag (Store Bededag) (+26), Himmelfahrt (+39), Pfingsten (+49) und Fronleichnam (+60) sind ebenfalls bewegliche Feiertage, weil sie an das Osterdatum gekoppelt sind.
D = 39 ' Beispiel Himmelfahrt (Distanz 39 Tage nach
Ostern)
F = E + D ' Ostern (Easter) + Abstand (Distanz) des
Feiertages
G = F + F / 154 '
G Kennzahl des gesuchten Tages
Tag = 1+ G MOD 31 ' Datum Tag des gesuchten beweglichen
Feiertags
Monat = G / 31 ' Datum Monat
Anmerkung: F / 154 (ohne Kommastellen) überbrückt den fehlenden
31.4.
Beispiel Himmelfahrt 2013
F = 123 + 39 = 162
G = 162 + 162 / 154 = 162 + 1 = 163
Tag = 1 + 162 MOD 31 = 1 + 8 = 9
Monat = 162 / 31 = 5 Himmelfahrt ist am 9.5.2013
9.16) Berechnung
der beweglichen Feiertage einschließlich Karnevalstage
(gilt für alle Jahre)
Weiberfastnacht (-52), Rosenmontag (– 48), Aschermittwoch (– 46), Karfreitag (–2), Ostermontag (+1), Himmelfahrt (+39), Pfingsten (+49) und Fronleichnam (+60)
D = – 48 ' Beispiel Rosenmontag ( Distanz 48 Tage vor Ostern)
F = E + D 'Ostern (Easter) + Abstand (Distanz) des
Feiertages
G = F + F / 154 – 92 / F * (3
– SJ) 'mit Ergänzung
für Karnevalstage im Februar
Tag = 1+ G MOD 31 ' Datum Tag des gesuchten beweglichen
Feiertags
Monat = G / 31 ' Datum Monat (G Kennzahl des gesuchten Tages und Monats)
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Die Jahrhundertregel –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) kann bei Beschränkung auf 2001 bis 2099 weggelassen werden.
Anmerkung: 92 / F hat den Wert= 0 ab März, jedoch
Februar den Wert= 1 (dies entspricht (F < 93)= wahr)
Damit werden für Februar 3 bzw. in Schaltjahren 2 Tage abgezogen.
Die Osterkennzahl beginnt am 1. Dezember mit 31 Tagen für jeden Monat. Der 1.3. hat damit den Wert 3*31=93.
'***********************************************************************************
Ergänzung am 11.10.2008 Das
Jahr 2100 ist noch weit entfernt. Oder
doch nicht?
Maximilian Alexander, Du sollst mit 91 Jahren nicht um 1 Tag zu
spät den Rosenmontagszug verpassen.
Dir widme ich die Korrektur für Februar im Jahr 2100, das kein
Schaltjahr ist.
'***********************************************************************************
9.17) Jahrestag von Ostersonntag und von
beweglichen Feiertagen berechnen (fester Abstand zu Ostern)
TagNr = E – 33 + SJ + D ' Jahrestag von Ostersonntag (D = 0), Pfingstmontag (D = 50)
Beispiele:
Ostersonntag am 8.4. 2012 (Schaltjahr) hat die Osterkennzahl E = 131
TagNr = E – 33 + SJ +0 = 131 –33 +1 = 99
Pfingstmontag Tag-Nr = 131 –33 + 1 + 50 = 149
Kontrolle: Pfingstmontag am 28. Mai 2012 mit der Formel
für Tagnummer im Jahr für März bis Dezember
TagNr = Tag + (153 * Monat –162) / 5 + SJ = 28 +(153 * 5 –162)
/ 5 +1 = 28 +120 +1 = 149
9.18) Datum zum Wochentag berechnen mit
Osterkennzahl
für bewegliche
Feiertage ohne festen Abstand zu Ostern
(gilt für
alle Jahre)
Im Folgenden liegt der Wochentag (Mittwoch, Sonntag, usw.) fest
und es wird das zugehörige Datum (Tag) für bewegliche Feiertage und besondere
Tage gesucht.
Wenn
die Osterkennzahl für die Berechnung von Ostern ohnehin bereits festliegt, dann
ist sinnvoll auch andere Feiertage mit meinen folgenden Formeln zu bestimmen.
Dabei ist das Jahr beliebig, weil es schon
in der Osterkennzahl berücksichtigt wurde. Auch Schaltjahre sind dabei schon
berücksichtigt.
Die
Osterkennzahl E (siehe oben)
fertig berechnet: E= 115 für 2008, E= 135 für 2009, E= 127 für
2010, E = 147 für 2011, E = 131 für 2012, E = 123 für
2013, usw.
Die Osterkennziffer Ed =
E MOD 7 (Rest nach
Division durch 7) beträgt für 2008 (3), 2009 (2), 2010 (1),
2011 (0),.2012 (5), 2013 (4), 2014 (3), 2015 (2),
2016 (0), 2017 (6), ...
Die Osterkennziffer Ed folgt einem
Gesetz –1 von Jahr zu Jahr und
im Schaltjahr –2 . Wird die Zahl negativ, muss 7 addiert werden z.B.
2011 auf Schaltjahr 2012 (0 –2 +7 = 5).
Die Osterkennziffer Ed = E MOD 7
habe ich definiert, weil sie einfach in die Formeln eingesetzt werden kann. Bei
(E + 2) MOD 7 wird Ed für E eingesetzt.
Berechnung Buß- und Bettag mit dem Osterdatum (Osterkennzahl E oder
Osterkennziffer E MOD 7)
Tag = 16 + E MOD 7 ' Datum Tag für Buß- und Bettag (Mittwoch) im November
Berechnung
Datum Muttertag (mit Osterkennzahl
E)
Tag = 8 + E MOD 7 ' Datum Tag für
Muttertag (2. Sonntag) im Mai, bei E= 114 bis 118
fällt Muttertag auf Pfingsten
Tag = 8 + E MOD 7 – 118 / E *7 ' mit Korrektur auf 1. Sonntag im Mai (–7 Tage), wenn Pfingsten auf denselben Tag fällt.
Der Quotient 118 / E hat den Wert = 1, wenn die Osterkennzahl E = 114 bis 118 beträgt. Dann liegt Ostern auf 22. bis 26. März und Pfingsten auf dem 2. Sonntag im Mai 10. bis 14. Mai.
Tag = 1 + E MOD 7 + E / 119 *7 ' mit Korrektur auf 2. Sonntag im Mai (+7 Tage), wenn Pfingsten nicht auf denselben Tag fällt.
Berechnung Datum Sommerzeit Winterzeit (mit Osterkennzahl E oder
Osterkennziffer E MOD 7)
Tag
= 25+ ( E + 2 ) MOD 7 '
Datum Tag für Beginn Sommerzeit im März
Tag = 25+ ( E + 5 ) MOD 7 ' Datum Tag für
Ende Sommerzeit im Oktober
Berechnung
Datum Totensonntag und Volkstrauertag
(mit Osterkennzahl E oder Osterkennziffer E MOD 7)
Tag = 20 + E MOD 7 ' Datum Tag für Totensonntag (Ewigkeitssonntag) im November
Tag = 13 + E MOD 7 ' Datum Tag für Volkstrauertag im November
Berechnung
Datum Advent (mit Osterkennzahl E
oder Osterkennziffer E MOD 7)
Wann fallen Heiligabend und 4. Advent
zusammen?
Tag = 18 + E MOD 7 ' Datum Tag für 4. Advent im Dezember, 24.12.2017 bei Osterkennziffer =6
Tag = 11 + E MOD 7 ' Datum Tag für 3. Advent im Dezember
Tag = 4 + E MOD 7 ' Datum Tag für 2. Advent im Dezember
Tag = 1+ (26 + E MOD 7 ) MOD 30 ' Datum Tag für 1. Advent im Dezember / November
Monat = 12 – Tag / 27 ' Datum Monat zu Tag der Adventsonntage (Dezember / November)
Auf
welche Wochentage fällt Weihnachten (Heiligabend), wenn der 1. Advent im
November liegt?
Tag = 1+ (26 + E MOD 7 ) MOD 30 ergibt den Tag für 1. Advent am 27. bis 30. November bei E MOD 7 = 0 bis 3.
Der Wochentag Heiligabend 24.12. ist 6 – E MOD 7. Bei E MOD 7 = 0 bis 3 fällt der Wochentag auf 3 bis 6 = Mittwoch bis Samstag.
Frühestes
und spätestes Datum der Feiertage
Beim frühesten Termin ist der Rest ... MOD 7 = 0. Der späteste Termin wird berechnet mit ... MOD 7 = 6.
9.19) Wochentag zu einem festen Datum
berechnen mit Osterkennzahl
, beweglicher Wochentag (gilt für alle Jahre)
Im
Folgenden liegt das Datum fest und es wird der zugehörige Wochentag (Mittwoch,
Sonntag, usw.) gesucht.
Mit Ostern wird hier der Wochentag z.B. von Weihnachten berechnet. Dabei ist das Jahr beliebig, weil es schon in der Osterkennzahl berücksichtigt wurde.
(1)
Allgemein siehe auch bei Berechnung Wochentag (oben)
(2)
Allgemein als Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
Tabellenwert
je Monat, KT in Klammern:
Jan (6 – SJ), Feb (2
– SJ), März (2), Apr (5), Mai (0), Juni (3),
Juli (5), Aug (1), Sept (4), Okt (6), Nov (2),
Dez (4)
WoTag = 6 – ( E – Tag – KT ) MOD 7 ' Wochentag für beliebiges Datum
Beispiel: Valentinstag 14. Februar
WoTag = 6 – (E –14 – (2 – SJ)) MOD 7 = 6 – (E – 16 +SJ) MOD 7
Der Term wird noch umgeformt ( –16) MOD 7 = –2 mit +7 wird der Wert zu +5
Valentinstag: WoTag = 6 – ( E + 5 + SJ ) MOD 7 ' Formel gültig für alle Jahre
Beispiel: Valentinstag 14.2.2012 ( Osterkennzahl E = 131), SJ = 1 (Schaltjahr)
WoTag = 6 – (131 +5 +1) MOD 7 = 6 – 4 = 2 ( Dienstag 14.2.2012)
(3) Alternative Formeln mit der Osterkennzahl
oder Osterkennziffer
Die Formel kann man auch umformen mit 6 – ( E + x ) MOD 7 = (6 * E + 6 – x ) MOD 7
WoTag = 6 – ( E + 5 + SJ ) MOD 7 = (6 * E + 6 –5 –SJ) MOD 7 '
Valentinstag: WoTag = (6 * E + 1 – SJ ) MOD 7 ' alternative Formel
(4)
Wochentag vom Valentinstag 14.2. des nächsten Jahres
Schaltjahr
SJ muss bei Januar/Februar nicht bei Rechnung mit Osterkennzahl des
Vorjahres berücksichtigt werden, weil es in dieser Osterkennzahl bereits
enthalten ist.
Valentinstag: WoTag = 6 – ( E + 4 ) MOD 7 ' Beispiel mit Osterkennziffer 2011 für 14.2.2012 = 6 – (0+4) MOD 7 = 2 =Dienstag
(5) Weitere
besondere Tage mit festem Datum (beweglicher Wochentag). Diese Formeln sind abgeleitet aus obiger
allgemeiner Formel.
Wochentag von Heiligabend 24.12. und Silvester 31.12. und niederl. Koninginnedag 30.4.
WoTag = 6 – E MOD 7 ' Wochentag Heiligabend 24.12. und 31.12. und 30.4.
Beispiel für 2012: Osterkennzahl E = 131, bzw. Osterkennziffer E MOD 7 = 5
WoTag = 6 – E MOD 7 = 6 –131 MOD 7 = 6 – 5 = 1 ' (24.12.2012 ist ein Montag).
Viele freie Tage gibt es immer bei Osterkennziffer = 5. Dann ist der 24.12. ein Montag, 6 –5 = 1 (Mo).
Bei Osterkennziffer = 6 ist der Wochentag = 0, dann ist der 24. Dezember Sonntag, der 4. Advent.
Wochentag vom 1. Weihnachtsfeiertag 25.12. oder Tag der Arbeit 1. Mai
WoTag = 6 – ( E + 6 ) MOD 7 ' Wochentag 1. Weihnachtstag 25.12. oder 1. Mai
WoTag = 6 * E MOD 7 ' alternative Formel für Wochentag 1. Weihnachtstag 25.12. oder 1. Mai
Wochentag zu
Nikolaus 6.12.
WoTag = 6 – ( E + 4 ) MOD 7 ' Wochentag Nikolaus am 6.12.
Wochentag zu
Heilige Drei Könige 6.1.
WoTag = 6 – ( E + 1 ) MOD 7 Wochentag Heilige Drei Könige 6.1. im nächsten Jahr
Beispiel mit Osterkennziffer 2011: WoTag = 6 – (0 +1) MOD 7 = 5 = Freitag 6.1.2012
WoTag = 6 – ( E + 2 + SJ ) MOD 7 ' Wochentag Heilige Drei Könige 6.1. aktuelles Jahr
Beispiel mit Osterkennziffer 2012: WoTag = 6 – (5 +2 +1) MOD 7 = 5 = Freitag 6.1.2012
Wochentag vom
Jahresanfang 1.1. des nächsten Jahres
WoTag = 6 – ( E + 6 ) MOD 7 ' Beispiel mit Osterkennziffer 2011 , Wochentag 1.1.2012 = 6 – (0+6 ) MOD 7 = 0 =Sonntag
WoTag = 6 * E MOD 7 ' alternative Formel, Wochentag 1.1.2012 = 6 *0 MOD 7 = 0 =Sonntag
Wochentag vom
Jahresanfang 1.1. des aktuellen Jahres
WoTag = 6 – ( E + SJ ) MOD 7 ' Beispiel mit Osterkennziffer 2012 , Wochentag 1.1.2012 = 6 – (5 +1) MOD 7 = 0 =Sonntag
Der Niederländische Königinnentag liegt auf dem 30.4., aber falls Sonntag, dann Samstag z.B. 29.4.2017
WoTag = 6 – E MOD 7 + E MOD 7 / 6 * 6' weekdag Koninginnedag, falls =0, dann =6, Samstag 29.4.
(6)
Jahre mit gleichem Datum und Wochentag
Datum und Wochentag sind gleich in Jahren mit gleicher Osterkennziffer, in Schaltjahren jedoch erst ab März.
zum Beispiel 2009 (2) und 2015 (2), nicht jedoch Januar und Februar 2011 (0) und 2016 (0 +SJ).
9.20) Ostersonntag berechnen in Tabellenkalkulation z.B. Excel (statt Osterfunktion)
In
folgenden Beispielen wird die 4-stellige Jahreszahl z.B. 2013 in Zelle A1
eingegeben. In eine beliebige andere Zelle wird die Formel kopiert.
Diese Zelle muss als Format
Datum gewählt werden. Nach Eingabe 2013 in A1 wird das Datum 31.3.2013
angezeigt.
(1) Gültig für 1982 bis 2048
= DATUM (A1;3;28) + REST (24+REST (A1;19)*19;30) - REST ( GANZZAHL (A1*5
/ 4) + REST (24+REST (A1;19)*19;30) +1 ;7)
Erläuterung: Die Formel addiert zum 28. März die Anzahl Tage vom 21. März bis Vollmond und der Wochentag des Vollmondes wird abgezogen.
Wenn am Samstag, den 21.3. Vollmond ist, dann ist 28 + 0 – 6 = 22. 3. der Ostersonntag (frühester Termin).
Wenn am Mittwoch, den 27.3. Vollmond ist, dann ist 28 + 6 – 3 = 31. 3. der Ostersonntag (im Jahr 2013).
(2)
Gültig für 1900 bis 2099
= DATUM (A1;3;28) + REST (24+REST (A1;19)*19;30) - ( REST
(24+REST (A1;19)*19;30) > 27) - REST ( GANZZAHL (A1*5 / 4) + REST (24+REST
(A1;19)*19;30) - ( REST (24+REST (A1;19)*19;30) > 27) +1 ;7)
Erläuterung: Der
Term – ( REST (24+REST
(A1;19)*19;30) > 27) ist die Korrektur für die Osterausnahmen 1954,
1981, 2049, 2076.
(3) Gültig
für 1900 bis 2199
= DATUM (A1;3;28) +
REST (24+REST (A1;19)*19;30) - ( REST (24+REST (A1;19)*19;30) > 27) - REST ( GANZZAHL(A1*5/4) +
REST (24+REST (A1;19)*19;30) - ( REST (24+REST (A1;19)*19;30) > 27) + (A1
< 2100) ;7)
Erläuterung: Der Term + (A1 < 2100) ersetzt +1 der anderen Formeln für 1900 bis 2099. Ab 2100 entfällt der Tag (kein
Schaltjahr).
(4)
Bewegliche Feiertage
In weiteren Zellen wird zum Datum von Ostersonntag der Abstand addiert, z.B. Himmelfahrt +39 Tage oder Rosenmontag – 48 Tage.
10)
Datum mit Jahreszahl
berechnen
Der Wochentag (Mittwoch, Sonntag,
usw.) liegt fest und es wird das zugehörige Datum (Tag) gesucht.
10.1)
Buß- und Bettag
mit Jahreszahl berechnen
(1) Jahr 2-stellig für Jahr 2000 bis 2099
Tag = 22 – (year + year / 4) MOD 7 ' Datum Tag für Buß- und Bettag (year 2-stellig, 00 bis 99) im November
Oder mathematisch umgeformt: Tag = 22 – ( year * 5 / 4 ) MOD 7
(2) Jahr 4-stellig für Jahr 1901 bis 2099
Buss_Bet_Tag = 22 – (JAHR –1 + JAHR / 4) MOD 7 ' Datum Tag für Buß- und Bettag (Jahr 4-stellig, 1901 bis 2099)
Anmerkung: Das Datum eines Wochentags hängt allein vom Jahr ab.
Der Rest nach der Division (MOD 7) beträgt 0 bis 6. Dieser Wert wird vom spätest möglichen Tag 22 abgezogen, dadurch liegt der Buß- und Bettag auf dem 16. bis 22. November.
Diesen Rest nenne ich Jahreskennziffer Jx. Damit kann noch einfacher gerechnet werden.
10.2)
Jahreskennziffer Jx
Buss_Bet_Tag = 22 – Jx ' Datum Tag für Buß- und Bettag im November
Der folgend errechnete Wert Jx kann auf verschiedene Weise gebildet werden.
Jx = (year + year / 4) MOD 7 ' year 2-stellig 00 bis 99 für 2000 bis 2099
Jx = year * 5 / 4 MOD 7 ' year 2-stellig (weitere Möglichkeit)
Jx = (Jahr –1 + Jahr / 4) MOD 7 ' Jahr 4-stellig 1901 bis 2099
Jx = (Jahr * 5 – 4 ) / 4 MOD 7 ' Jahr 4-stellig (weitere Möglichkeit)
Jx = (Jahr + Jahr / 4 – Jahr / 100 + Jahr / 400) MOD 7 ' Jahr 4-stellig ab 1583 (gregorianisch)
Jx = 6 – E MOD 7 ' mit Osterkennzahl E, alle Jahre ab 1583 (gregorianisch)
Anmerkung: Die Jahreskennziffer
hängt auch mit der Osterkennziffer Ed (siehe oben) zusammen. Die Formel
lautet Jx = 6 –
Ed
Buss_Bet_Tag = 22
– Jx mit
Jx = 6 – E MOD 7
ergibt
Buss_Bet_Tag = 16 + E MOD 7
Jx ist der
Wochentag vom 31.12. in jedem Jahr, auch im Schaltjahr.
10.3)
Muttertag, Sommerzeit und Advent mit Jahreskennziffer
berechnen
(1)
Muttertag
ist der zweite Sonntag im Mai mit dem spätest möglichen Tag 14. Mai. Soll Pfingsten berücksichtigt werden, wird mit der Osterkennzahl (siehe oben) gerechnet.
Tag = 14 – Jx ' Datum Tag für Muttertag im Mai
(2)
Advent
Tag = 24 – Jx ' Datum Tag für 4. Advent im Dezember
Tag = 17 – Jx ' Datum Tag für 3. Advent im Dezember
Tag = 10 – Jx ' Datum Tag für 2. Advent im Dezember
Tag = 1 + (32 – Jx) MOD 30 ' Datum Tag für 1. Advent im Dezember / November
Monat = 12 – Tag / 27 ' Datum Monat jeweils Tag des Advents (Dezember / November)
(3)
Sommerzeit Winterzeit (Merkerbit Sommerzeit für
Steuerungen siehe Teil 2 Uhr)
Beginn der Sommerzeit ist letzter Sonntag im März mit dem spätest möglichen Tag 31.3. (Konstante = 5).
Tag = 31 – (Jx + 5) MOD 7 ' Datum Tag für Beginn Sommerzeit im März
Ende der Sommerzeit ist letzter Sonntag im Oktober mit dem spätest möglichen Tag 31.10. (Konstante = 2)
Tag = 31 – (Jx + 2) MOD 7 ' Datum Tag für Ende Sommerzeit im Oktober
(4)
Sommerzeit
direkt mit Jahr berechnet 2-stellig für 2000 bis 2099
Tag = 31 – ( 5 + year*5 / 4) MOD 7 ' Datum Tag für Beginn Sommerzeit (year 2-stellig)
Tag = 31 – ( 2 + year*5 / 4) MOD 7 ' Datum Tag für Ende Sommerzeit (year 2-stellig)
(5) Sommerzeit mit 4-stelligem Jahr (1901) 1996 bis 2099
Im Vergleich zur 2-stelligen Jahreszahl ist die Konstante um –1 verringert.
Tag = 31 – (Jahr + 4 + Jahr / 4) MOD 7 ' Datum Tag für Beginn Sommerzeit (Jahr 4-stellig)
Tag = 31 – (Jahr + 1 + Jahr / 4) MOD 7 ' Datum Tag für Ende Sommerzeit (Jahr 4-stellig)
Tag = 31 – ( 4 + Jahr*5 / 4) MOD 7 ' Datum Tag für Beginn Sommerzeit (Jahr 4-stellig)
Tag = 31 – ( 1 + Jahr*5 / 4) MOD 7 ' Datum Tag für Ende Sommerzeit (Jahr 4-stellig)
Anmerkung: Die jetzt gültige Sommerzeit von März bis Oktober jeweils letzter Sonntag wurde 1996 eingeführt.
2-stellig für 2000 bis 2099 oder
4-stellig für 1900 bis 2099 oder beliebiges Jahr mit Osterkennzahl E
(1)
Eidgenössischer
Dank-, Buss- und Bettag
wird am dritten Sonntag im September gefeiert, mögliches Datum 15. bis 21.9.
Tag = 21 – (4 + year *5 / 4) MOD 7 ' Datum Tag für Sonntag spätestens am 21. 9. (year 2-stellig)
Dieser Tag kann ebenfalls mit der Osterkennzahl (siehe oben) berechnet werden.
Tag = 15 + (E + 3) MOD 7 ' mit Osterkennzahl E, Datum Tag für Sonntag frühestens am 15.9.
(2)
Genfer Bettag
liegt auf dem Donnerstag nach dem ersten Sonntag im September.
Tag = 11 – (4 + year *5 / 4) MOD 7 ' Datum Tag für Donnerstag spätestens am 11. 9. (year 2-stellig)
Tag = 5 + (E + 3) MOD 7 ' mit Osterkennzahl E, Datum Tag für Donnerstag frühestens am 5.9.
(3)
Berner Zwiebelmarkt
am vierten Montag im November bedeutet spätester Termin 28.11.
Tag = 28 – ( 1 + year *5 / 4 ) MOD 7 ' Berner Zibelemärit, (year 2-stellig)
Tag = 28 – ( Jahr *5 / 4 ) MOD 7 ' Berner Zibelemärit, (Jahr 4-stellig)
Tag = 22 + (E + 6) MOD 7 ' berechnet mit Osterkennzahl E, Datum Tag für Montag frühestens am 22.11.
12)
Allgemeine Berechnung des Datums von Feiertagen oder
Sondertagen
Der Wochentag (Mittwoch, Sonntag, usw.) liegt fest und es wird
das zugehörige Datum (Tag) gesucht.
Das Datum vom Erntedankfest oder anderer Feiertage kann mit einem dieser Verfahren (Jahreszahl oder Ostern) berechnet werden.
Beim Verfahren mit dem Osterdatum wird der frühest mögliche Tag und beim Verfahren mit der Jahreszahl wird der spätest mögliche Tag benutzt.
Umrechnung: (Frühest möglicher Tag) + 6 = (spätest
möglicher Tag)
z.B. für 1. Sonntag im März ist der frühest mögliche Tag der 1.
März, dann ist der 7. März der spätest mögliche Tag.
Oft sind
zusätzlich Konstante notwendig, weil Monate nicht ein Vielfaches von Wochen
sind.
Im Folgenden wird die Jahreszahl (year 2-stellig für 2000 bis 2099) genutzt.
Bei 4-stelliger Jahreszahl 1900
bis 2099 wird die Konstante K um –1 verringert. Zu einer negativen Konstanten
wird +7 addiert.
(1) Für Feiertage im März bis Dezember gelten die folgenden einfachen Formeln (year 2-stellig für 2000 bis 2099).
Tag =
(spätester Tag) – (year + K + year / 4) MOD 7
Die Konstante K beträgt 0 bis 6 je nach Feiertag und kann mit meiner Formel berechnet werden.
K = ((13*Monat +8) / 5 + (spätester Tag) – Wochentag) MOD 7
Beispiele:
Die
endgültige Formel entsteht, indem der späteste Tag und die errechnete Konstante
K eingesetzt werden.
Tag = 31 – (year + K + year / 4) MOD 7 ' Datum Tag z.B. spätester Tag am 31. des Monats
Tag = 7 – (year + K + year / 4) MOD 7 ' Datum Tag z.B. spätester Tag am 7. des Monats
Tag = 11 – ( 5*year / 4 + K ) MOD 7 ' (alternative Formel) z.B. spätester Tag am 11. des Monats
Beispiele für Berechnung der Konstanten K für März bis Dezember:
Berechnung des 1. Montags im Mai. (Montag = 1, spätester Tag = 7.5.)
K =
((13*5+8) / 5 + 7 – 1) MOD 7 = ((65+8) / 5 + 6) MOD 7 = (14+6) MOD 7 = 6
Beginn der Sommerzeit ist letzter Sonntag im März. (Sonntag = 0, spätester Tag = 31.3.)
K =
((13*3+8) / 5 + 31 – 0) MOD 7 = ((39+8) / 5 +31) MOD 7 = (9+31) MOD 7 = 5
Genfer Bettag liegt auf Donnerstag nach ersten Sonntag im September (Donnerstag = 4, spätester Tag 11.9., weil Sonntag 7.9.)
K =
((13*9+8) / 5 +11 – 4) MOD 7 = ((117+8) / 5 + 7) MOD 7 = (25+7) MOD 7 = 4
Auch mit der Osterkennzahl E kann das Datum eines Wochentages sehr einfach bestimmt werden. Dabei ist das Jahr beliebig, weil es schon in der Osterkennzahl berücksichtigt wurde.
Tag = (frühester Tag) + (E + Ke ) MOD 7 ' Datum Tag z.B. frühester Tag am 5. des Monats
Die endgültige
Formel entsteht, indem der früheste Tag und die errechnete Konstante Ke
eingesetzt werden.
Die Konstante Ke beträgt 0 bis 6 je nach Feiertag und kann mit meiner Formel berechnet werden.
Ke = (57 – (13*Monat +8) / 5 – (frühester Tag) + Wochentag) MOD 7
Beispiel für Berechnung der Konstanten Ke für März bis Dezember:
Genfer Bettag liegt auf Donnerstag nach ersten Sonntag im September (Donnerstag = 4, frühester Tag 5.9., weil Sonntag 1.9.)
Ke = (57 – (13*9+8) / 5 – 5 + 4) MOD 7
= (57 – 25 – 5 + 4) MOD 7= 3
Kontrolle der obigen Berechnung für Genfer Bettag mit spätestem Tag ergab K = 4 und kann umgerechnet werden zur Konstanten Ke
Ke = 7 – K = 7 – 4 = 3
(2) Für Feiertage im Januar und Februar gelten die folgenden Formeln (year 2-stellig für 2000 bis 2099).
Tag = 27 – (year
+ ( year + K ) / 4) MOD 7 ' Datum Tag z.B. spätester Tag 27. des Monats
Tag = 27 – (5 * year + K ) / 4 MOD 7 ' alternativ
Monatsanfang 1.1.2000 war ein Samstag also = 6 und 1.2.2000 war ein Dienstag also = 2
Januar Ma = 6, Februar Ma = 2 (gültig für 2000 bis 2099)
K = (Ma + (spätester Tag) – Wochentag) MOD 7 *4 –1
Beispiele für Berechnung der Konstanten für Januar und Februar:
Sonntag spätester Tag 27. Januar (Sonntag =0, spätester Tag 27.)
K = (6 + 27 – 0 ) MOD 7 *4 –1 = 19
Freitag spätester Tag 27. Februar (Freitag = 5, spätester Tag 27.)
K = (2 + 27 – 5 ) MOD 7 *4 –1 = 11
13) Ostersonntag (Tag und Monat) berechnen für Steuerungsgeräte in Basic z.B.
c-control
Fortsetzung Datum
berechnen für Steuerungen
------------------------------------------------ ENDE Teil 2 Datum berechnen allgemein ------------ nach_oben
--------------------- zurück zu Datum berechnen Startseite
Für Rückfragen und Hinweise: Datum@M.Wilzeck.de