2. Tipps und Tricks Teil 2 ab 2.2.18 (zurück zu Teil 2 Anfang , Teil 2 Uhr, zu Teil_1 , zu Startseite )
Datum berechnen (2.3.2008,
Stand: 15.12.2011)
siehe
auch Informationen, Ergänzung und
Erläuterung für Datum berechnen und Datum
berechnen für Steuerungen
Tag-Nummer im Jahr berechnen, Schaltjahr,
Monatslänge, Datumsdifferenz
Datum_aus_Tagnummer des Jahres bilden, Neu
Wochen-Nummer
im Jahr errechnen, richtige Wochennummer am Anfang und Ende des Jahres
Wochennummer mit
Formel berechnen einfache Formeln mit Jahr und Osterkennzahl
Datum einer Kalenderwoche Datum vom Wochenanfang Montag bestimmen
Wochentag eines Datums berechnen im Julianischen und Gregorianischen Kalender, Wochentag am
Monatsende
Einfache_Berechnung_des_Wochentages
Umrechnen vom Julianischen zum Gregorianischen Datum NEU
überarbeitet
Osterdatum_berechnen einfache
Osterformel, Osterkennzahl und
Osterkennziffer, für alle Jahrhunderte
Zusammenfassung: Formeln
zu Datum und Feiertagen mit Osterkennzahl
Download Formeln zu Feiertagen.doc Formeln zu Feiertagen.pdf
Frühester und
spätester Ostertermin errechnen siehe Ergänzung und
Erläuterung
Bewegliche_Feiertage berechnen
Rosenmontag, Karfreitag, Himmelfahrt, Pfingsten, Fronleichnam
Auch_mit_Osterdatum_berechnen Buß- und Bettag , Totensonntag, Muttertag ,
Datum Sommerzeit , Datum Advent,
Wochentag_mit_Osterkennzahl berechnen
für Weihnachten und Silvester,
Wochentag Nikolaus
Feiertage
mit Jahreszahl berechnen
Berechnung Buß-
und Bettag, Muttertag, Advent, Datum Sommerzeit Winterzeit
Schweizer_Feiertage
mit Jahreszahl oder Osterkennzahl berechnen
Datum für weitere_Feiertage
und besondere Tage berechnen
Weiter zu Datum berechnen für Steuerungen Fortsetzung 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
Weiter zu Tipps und Tricks Teil 3
Zeittakte mit Uhrzeit und TIMER, Wartezeit,
(Schaltuhr siehe Softwarebausteine)
Weiter zu Tipps und Tricks Teil 4
Überschreitung von 32767 beim Rechnen, Begrenzen
Zählen bis 65535 im word, Zahl 0 bis 65535, Anzeigen mit 1 bis 2 Kommastellen
Zahlen
über 65535 Zähler, Addition,
Multiplikation, Division
Gott hat die Zeit geschaffen, der Teufel den Kalender.
(Erwin Chagraff)
2.2.18)
Tag-Nummer im Jahr berechnen, Jahrestag (mehr dazu Information
Ergänzung
und Erläuterung)
Achtung, hier müssen
Ganzzahl-Division (Kommastellen fallen weg) und Divisions-Rest (MOD) angewendet
werden.
Beispiel: Ganzzahl = 11 / 7 = 1 Rest
= 11 MOD 7 = 4
(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
Anmerkung: 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.
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
(2) 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
Zwischen den beiden Formeln kann man umschalten mit
if Monat < 3 then TagNr = Tag + 31 * Monat –31 else TagNr = Tag + (153 * Monat –162) / 5 + SJ
(3) Tagnummer mit Formel berechnen (alle Jahrhunderte) aus Tag, Monat und Jahr
TagNr = Tag + 30 *Monat – 30 + Monat *9 / 16 – (7+Monat) / 10 *(2 – SJ) Schaltjahrkennung SJ siehe oben.
Kürzere Formel für alle Monate zur
Berechnung der Tagnummer
TagNr = Tag + 489 * Monat / 16 – (7 + Monat) / 10 *(2 – SJ) – 30
(4) Abstand
von Datum zu Datum
(Datumsdifferenz)
Beispiel: Wie
viele Tage sind es noch bis Weihnachten?
Für jedes Datum wird die Tagnummer (Jahrestag) ausgerechnet und die Differenz gebildet.
Bei Überschreitung des Jahres müssen natürlich 365 bzw. 366 Tage addiert werden.
Wie viele
Tage liegen zwischen Weihnachten Heiligabend und Ostern im nächsten Jahr?
Jahres-TagNr (von Ostersonntag) = E – 33 + SJ (Berechnung der Osterkennzahl E siehe unten)
Zu der
Jahres-TagNr werden die Tage im Dezember = 31 –24 = 7 addiert.
Beispiel 24.12.2011 und Osterkennzahl (E= 131 für 2012), 2012 ist Schaltjahr
Anzahl = 131 –33 + 1 +7 = 106 Tage
(5)
Monatslänge bestimmen = Letzter Tag (Datum) im Monat
Monatslänge = 30 + (Monat * 9 /
8) MOD 2 – 2 / Monat * (Monat –1) *(2 – SJ)
Beispiel Januar = 30 + (1*9 / 8) MOD 2 – 2 * 0 = 31, Beispiel April = 30 + (4*9 / 8) MOD 2 – 0 = 30 + 4 MOD 2 = 30
(6) Anzahl
der Tage der vorher gehenden Monate und Jahrestag am Monatsende
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 = (153 * Monat –162) / 5 + SJ (gültig für Monate März bis Dezember)
z.B. für März (153 * 3 –162 ) / 5 +SJ = 59 + SJ = Anzahl der Tage vor dem 1. März (Kontrolle 31 +28 +SJ).
Dagegen wird der Jahrestag am jeweiligen Monatsende z.B. Februar mit folgender Formel bestimmt.
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)
2.2.19) Datum
aus Tag-Nummer des Jahres berechnen (alle Jahrhunderte)
Oben wurde das Datum bestehend aus Tag und Monat in Tagnummer umgewandelt.
Aufwändiger ist es, Jahr (4-stellig) und Tagnummer des Jahres in ein Datum bestehend aus Tag und Monat umzuformen.
Für Januar bzw. Februar und Schaltjahr sind die folgenden Korrekturen notwendig.
SJ = 1 / (1+Jahr MOD 4) – 1 / (1+Jahr MOD 100) + 1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
Tk = TagNr + 30 + (TagNr + 400 + SJ) / 460
*(2 – SJ) ' Tag Korrekturwert
nach Januar und Februar und Schaltjahr
Monat = Tk * 16 / 489
Tag = TagNr + 30 – 489 * Monat / 16 + (7 + Monat) /
10 *(2 – SJ)
2.2.20)
Wochen-Nummer berechnen
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 deutsche, europäische und ISO
Norm wird eingehalten. Achtung, Woche 1 ist die
Woche, in welcher der 4. Januar liegt.
Hiervon
weicht die amerikanische Norm ab und man erhält andere Wochennummern.
Am Anfang und Ende des Jahres werden die richtigen Wochennummern bestimmt.
Zum Beispiel liegt der 31.12.2008 in Woche 1 des Jahres 2009.
2009 hat 53 Wochen und die ersten Tage 2010 liegen in Woche 53.
1) Wochen-Nummer
mit Programmzeilen bestimmen (siehe Ergänzung und
Erläuterung)
2) Wochen-Nummer
mit Formeln berechnen, Kalenderwoche
(1)
Jahr 4-stellig
für 1976 bis 2103 mit Osterkennzahl E (Osterberechnung E siehe unten)
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
JT = Tag + 30 *(Monat –1) + Monat
*9 / 16 – (7+Monat) / 10 *(2 – SJ) ' Tag-Nr des Jahres
G = (JT +9 - ( E
+ 5 + SJ) MOD 7) / 7 ' Grundwert
Wochennummer
AJ = (53 – G) / 53 ' =1
bei WoNr G = 0 bei Anfang des Jahres
EJ = G /
53 '=1 bei
WoNr G =53 bei Ende des Jahres
AE =
((Jahr – (Jahr – 1972) / 28*28) MOD 11 +3 +EJ) MOD 6 / 5 '=1
bei 53 Wochen im aktuellen Jahr oder Vorjahr
WoNr = G + AJ * (AE + 52) – EJ *
(1 – AE) * 52 ' Wochennummer
Zugehöriges Jahr =
Jahr – AJ + EJ * (1 – AE)
(2)
Jahr 4-stellig
für 1901 bis 2099 Lösung mit Datum Tag Monat Jahr oder Jahrestag
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
JT = Tag + 30 *(Monat –1) + Monat *9 / 16 – (7+Monat) / 10 *(2 – SJ) ' Tag-Nr des Jahres
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) Wochennummer für alle Jahrhunderte Lösung mit Datum Tag Monat Jahr oder Jahrestag
SJ = 1 / (1+Jahr MOD 4) –1 / (1+Jahr MOD 100) +1 / (1+Jahr MOD 400) ' Schaltjahrkennung, im Schaltjahr = 1, sonst = 0
JT = Tag + 30 *(Monat –1) + Monat *9 / 16 – (7+Monat) / 10 *(2 – SJ) ' Tag-Nr des Jahres
VJ = Jahr –1 ' Jahr für Berechnung Wochentag im Januar(Schaltjahre ohne aktuelles
Schaltjahr)
A = (3 +
VJ + VJ / 4 – VJ / 100 + VJ / 400) MOD
7 ' Wochentag 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
(weiteres siehe Ergänzung und
Erläuterung)
2.2.21) Tag-Nr.
und Datum aus einer Kalenderwoche berechnen
Tag-Nr. bzw. Datum vom Wochenanfang (Montag) einer Kalenderwoche
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
Ergebnis ist die Tag-Nummer im Jahr. Dieser Montag muss in das Datum Tag und Monat umgeformt werden (Formel siehe oben).
Bei Woche 1 bedeutet Tag-Nr Null oder ein negatives Ergebnis, dass der Montag im vorhergehenden Jahr liegt.
Beispiel: TagNr = –2 +31 = 29. 12. Vorjahr
Woche 1 ist die Woche, in der
der 4. Januar liegt. (weiteres siehe Ergänzung und
Erläuterung)
2.2.22) Wochentag
eines Datums berechnen (DOW)
Hier wird mit Hilfe des Jahres einschließlich Schaltjahre die Tag-Nummer in der Woche (Day of week) bestimmt.
1) Wochentag mit der Tag-Nummer des Jahres berechnen (Tagnummer berechnen siehe oben)
(1) Allgemein für alle Jahrhunderte (ab 1582, Gregorianischer Kalender)
SJ = 1 / (1+Jahr MOD 4) – 1 / (1+Jahr MOD 100) + 1 / (1+Jahr MOD 400) 'Schaltjahr (SJ) = 1 , sonst = 0
WoTag = ( Jahr / 4 – Jahr / 100 + Jahr / 400 + Jahr + TagNr – 1 – SJ ) MOD 7 ' Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
TagKW = ( Jahr / 4 – Jahr / 100 + Jahr / 400 + Jahr + TagNr – 2 – SJ ) MOD 7 + 1 ' Tag 1 bis 7 ( Mo, Di, Mi, Do, Fr, Sa, So)
(2) 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
(3) 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)
2) Wochentag mit dem Datum (Tag, Monat, Jahr) berechnen
(1) Mit
Osterkennzahl E Allgemein für
alle Jahrhunderte (ab 1583) als Tag 0 bis 6 für So, Mo, Di, Mi, Do, Fr, Sa
Siehe auch
bei Ostern (weiter unten)
Falls Ostern und die beweglichen Feiertage ohnehin berechnet werden, ist einfach auch der Wochentag eines beliebigen Datums mit meiner Formel zu berechnen.
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 Jan. Feb.
WoTag = (Tag + m + 6 * E ) MOD 7 ' Wochentag für beliebiges Datum (gregorianisch)
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 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 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), ...
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).
(2) Wochentag vom Monatsende
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)
Letzter Sonntag im Monat usw. siehe weiter unten.
(3) Wochentag
mit Jahr berechnen: Allgemein für
alle Jahrhunderte als 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.
Üblich wird für die Monatsanfänge eine Tabelle benutzt. Einfacher sind meine Formeln:
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)
RJ = Jahr – (14 – Monat) / 12 ' Rechenjahr ist Vorjahr bei Jan Feb, sonst Jahr
MK = (1 + (Monat + 9) MOD 12) * 31 / 12 ' Monats-Konstante errechnen (Tabelle ist MK MOD 7)
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
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 = (1 +( 6 +9) MOD 12) *31/ 12 = (1+3) * 31 / 12 = 10 (Ganzzahl)
WoTag = (22 + 10 + 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 = (1 +( 10 +9) MOD 12) *31/ 12 = (1+7) * 31 / 12 = 20 (Ganzzahl)
WoTag = ( 31 + 20 +1517 +1517 / 4 – 2 ) MOD 7 = 1945 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.
(4)
Umrechnen vom Julianischen zum Gregorianischen Datum
(und umgekehrt)
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 im Jahr 200 bis 299 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. 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.
(5) Einfache Berechnung des Wochentages für 1901 bis 2099, gregorianisch.
Wenn der Monat bereits fest liegt, wird die erforderliche Konstante KM einfach aus einer Tabelle geholt und in die folgende Formel eingesetzt.
So kann jeder leicht den Wochentag seiner Geburt berechnen.
Konstante
je Monat KM in Klammern:
Jan (23), Feb (7),
März (8), Apr (20), Mai (0), Juni (12), Juli (20),
Aug (4), Sept (16), Okt (24), Nov (8), Dez (16)
Der Vorteil meiner Methode besteht darin, dass Schaltjahre bereits in der Formel berücksichtigt sind. Dadurch müssen Januar / Februar nicht gesondert behandelt werden.
Je nach Anwendungsfall kann eine der folgenden Formeln vorzugsweise gewählt werden.
WoTag = ((year + KM) / 4 + year + Tag ) MOD 7 ' Tag 0 bis 6 (year 2-stellig für Jahr 2000 bis 2099)
WoTag = ((5 * year + KM) / 4 + Tag ) MOD 7 ' Tag 0 bis 6 (year 2-stellig für Jahr 2000 bis 2099)
WoTag = ((5 * year + KM) / 4 + Tag +1 ) MOD 7 ' Tag 0 bis 6 (year 2-stellig für Jahr 1901 bis 1999)
WoTag = ((5 * Jahr + KM) / 4 + Tag –1 ) MOD 7 ' Tag 0 bis 6 (Jahr 4-stellig 1901 bis 2099)
(6) Beispiel: Wochentag 1.1.2000
WoTag = ((5 * year + KM) / 4 + Tag ) MOD 7 ' year ist Null bei year 2-stellig für Jahr 2000
WoTag = (23 / 4 +1) MOD 7 = 6 (Samstag)
(7) Beispiel: Wochentag 1.1.1999
WoTag = ((5 * Jahr + KM) / 4 + Tag –1 ) MOD 7 ' (Tag –1) entfällt bei 1.1. Jahr 4-stellig 1901 bis 2099
WoTag = (5*1999 +23) / 4 MOD 7 = 5 (Freitag)
(8) Beispiel: Nikolaus 6.12. (KM = 16, Tag = 6)
WoTag = ((5*year + KM) / 4 + Tag) MOD 7 ' Tag 0 bis 6 (year 2-stellig Jahr 2000 bis 2099)
WoTag = (5*year / 4 + 4 + 6) MOD 7 ' (..+10) MOD 7 wird gekürzt zu (..+3) MOD 7
WoTag = (5*year / 4 + 3) MOD 7 ' Vereinfachte Formel für Wochentag Nikolaus (year 2-stellig Jahr 2000 bis 2099)
(9) Beispiel: Tag der Arbeit 1. Mai (KM = 0, Tag entfällt, wegen Tag –1 bei Jahr vierstellig für 1901 bis 2099)
WoTag = (5 * Jahr / 4 ) MOD 7 ' Tag 0 bis 6 (Jahr 4-stellig 1901 bis 2099)
(10) Beispiel: Valentinstag 14. Februar (KM = 7, Tag entfällt, weil 14 MOD 7 = 0)
WoTag = ((5*year + KM) / 4) MOD 7 ' Tag 0 bis 6 (year 2-stellig Jahr 2000 bis 2099)
WoTag = ((5*10+7 ) / 4) MOD 7 = 0 = Sonntag 14. Februar 2010
(11) Beispiel: Tag der Deutschen Einheit 3.10. (KM = 24, Tag = 3)
WoTag = ((5*year + KM) / 4 + Tag) MOD 7 ' Tag 0 bis 6 (year 2-stellig Jahr 2000 bis 2099)
WoTag = ((5*10+24) / 4 + 3) MOD 7 = 0 = Sonntag 3. Oktober 2010
Trick: 3. Oktober hat immer den gleichen Wochentag wie der 2. Mai.
Wochentag Oktober ist gleich Mai mit (Tag –1) und Mai hat vorteilhaft KM = 0.
WoTag = (5*year / 4 + Tag –1 ) MOD 7 ' Gültig für Oktober (year 2-stellig Jahr 2000 bis 2099)
WoTag = (5*10 / 4 + 3 –1) MOD 7 = 0 = Sonntag 3. Oktober 2010
(12) Beispiel: Weihnachten 24.12.09 (Tag = 24 und KM = 16 für Dezember)
WoTag = ((5 * year + KM) / 4 + Tag ) MOD 7 = ((45+16) /4 +24) MOD 7 = (15+24) MOD 7 = Rest 4 ' =Donnerstag
1. Trick: Der 25.12. liegt immer auf demselben Wochentag wie der 1. Mai und Mai hat vorteilhaft KM = 0.
WoTag = (5 * year / 4 + Tag ) MOD 7 = (45/4 +1) MOD 7 = (11+1) MOD 7 = Rest 5 ' =Freitag (also liegt der 24.12. auf einen Donnerstag).
2. Trick: Weil der 25.12. denselben Wochentag wie der 1. Mai hat, liegt der 24.12. auf demselben Wochentag wie der 0. Mai (rechnerisch).
WoTag = (5 * year / 4 + Tag ) MOD 7 = (45/4 +0) MOD 7 = 11 MOD 7 = Rest 4 ' = Donnerstag 24.12.09
Mit diesen zwei Tricks entfallen Monat und Tag in der folgenden Formel für Heiligabend und Silvester.
Auf welchen
Wochentag fällt der 24. Dezember (Heiligabend)?
WoTag = 5 * year / 4 MOD 7 ' Heiligabend 24.12. oder Silvester (year 2-stellig 00 bis 99 für 2000 bis 2099)
Beispiel für 2011: 5*11 55/4 MOD 7 = 13 MOD 7 = Rest 6 ' = Samstag 24.12.2011
(13) Niederländischer Königinnentag liegt auf dem 30.4. Falls Sonntag, dann Samstag z.B. 29.4.2017
3. Trick: Der 30.4. liegt auf demselben Wochentag wie der 0. Mai (rechnerisch), Tag und Monat entfallen.
WoTag = 5 * year / 4 MOD 7 ' weekdag Koninginnedag, falls =0, dann =6, Samstag 29.4.
(14) Wochentag vom Monatsende berechnen
Setzt man Tag = 0 und KM des folgenden Monats z.B. März (KM = 8) in die Formel ein, dann erhält man den Wochentag vom Monatsende unabhängig von der Monatslänge, auch im Februar eines Schaltjahres.
Letzter WoTag des Monats = (5 * year + KM) / 4 MOD 7 ' mit KM des Folgemonats
Beispiel Februar 2012, (März KM =8): (5*12 + 8) / 4 MOD 7 = 3 ' Februar 2012 endet mit einem Mittwoch
3) Wochentag mit der Osterkennzahl berechnen
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.
Auch umgekehrt kann mit der Osterkennzahl und einem Wochentag (z.B. Sonntag) das Datum (z.B. Advent) berechnet werden. Weiteres siehe unten.
Dabei ist das Jahr beliebig, weil es schon
in der Osterkennzahl berücksichtigt wurde. Ebenso sind Schaltjahre bereits
enthalten.
Deshalb
sind diese Formeln sehr einfach, z.B. WoTag = 6 – E MOD 7 ' Wochentag Heiligabend 24.12.
Berechnung des Wochentages eines Datums mit der Osterkennzahl
siehe bei Ostern (weiter unten).
2.2.23) Osterdatum und bewegliche Feiertage berechnen
Ostern ist ein beweglicher Feiertag. Tag und Monat also das Datum im Jahr wird hier mit Formeln errechnet.
Ausgehend von verschiedenen Lösungen (unbekannter Autor 1876, Butcher , Carter, Oudin, Gauss, Dr. Lichtenberg) habe ich einen einfachen Rechengang (siehe (3) Einfache Berechnung für Ostersonntag) für die Jahre 1900 bis 2199 (gregorianischer Kalender) gebildet.
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.
Achtung, hier müssen
Ganzzahl-Division (Kommastellen fallen weg) und Divisions-Rest (MOD) angewendet
werden, z.B. 2010 MOD 19 = 15 bedeutet
Rest bei Division 2010 / 19 = Rest 15.
(1) Osterberechnung
umformen in Datum Ostersonntag und
Monat Osterkennzahl
Andere Osterberechnungen z.B. nach Gauß liefern als Ergebnis 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 (Märzdatum z.B. nach Gauß) nenne ich hier 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.
(2) Osterkennzahl
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 dadurch einfach zu berechnen
Für Tag = Ostersonntag mit Monat = Ostermonat ist die Osterkennzahl E = Tag –1 + Monat * 31
Beispiel: Ostern am 8.4.2011 ergibt Osterkennzahl E = 8 –1 + 4 * 31 = 131
Tag = 16 + E MOD 7 ist der Buß- und Bettag, Tag = 16 + 5 = 21. November 2012
(3) 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 = ( JAHR MOD
19 *19
+ 24 ) 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),
Bezugswert für alle beweglichen Feiertage
Tag = 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Monat = E / 31 ' Ostermonat (Monat)
(4) Osterberechnung für alle Jahrhunderte ab 1583
siehe Ergänzung und
Erläuterung
Test meiner Osterformeln mit Gauss /
Dr.Lichtenberg, J.M. Oudin, Anonym (Butcher), O'Beirne, Hutchin, Clavius
Piper (1841), Zeller (Fehler korrigiert) siehe Osterformeln_Test
(5) Beispiel Jahr 2012
A
= ( JAHR MOD 19 *19 + 24 ) MOD 30
2012 MOD 19 = 17 ' Rest von
Division 2012 / 19
A = ( 17 *19 + 24 ) MOD 30 = (323 + 24) MOD 30 = 17 '
Rest von Division 323 / 30
B = 120 + A – A / 27
B = 120 + 17 –0
= 137
C = ( B + JAHR * 5 / 4 ) MOD 7
2012 *5 / 4 = 2515
C = ( 137+ 2515) MOD 7 = 6
E = B – C = 137 – 6 = 131 ' E Osterkennzahl (Easter) für 2012
Tag
= 1+ E MOD 31 ' Ostersonntag (Datum Tag)
Tag = 1+ 131
MOD 31 = 1+ 7 = 8
Monat
= E / 31 ' Ostermonat (Monat)
Monat = 131
/ 31 = 4 Ostersonntag ist am 8.4.2012
(6) Berechnung der beweglichen Feiertage
(gilt für alle Jahre)
Palmsonntag (-7), Gründonnerstag (-3), Karfreitag (–2), Ostermontag (+1), 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 2012
F = 131 + 39 = 170
G = 170 + 170 / 154 = 170 +1 = 171
Tag = 1 + 171 MOD 31 = 1 + 16 = 17
Monat = 171 / 31 = 5 Himmelfahrt ist am 17.5.2012
(7) Berechnung der beweglichen Feiertage
einschließlich Karneval (Fasching, Fastnacht)
(gilt für alle Jahre)
Weiberfastnacht (–52), Rosenmontag (– 48), Aschermittwoch (– 46), Palmsonntag (–7), Karfreitag (–2), Ostermontag (+1), Himmelfahrt (+39), Pfingsten (+49) und Fronleichnam (+60)
Jesus Fastenzeit von 40 Tage in der Wüste ergibt sich aus der Differenz von Aschermittwoch und Palmsonntag, wobei der Beginn mitgezählt wird (Differenz +1).
In gleicher Weise wurde auch bei Himmelfahrt ursprünglich 40 Tage und bei Pfingsten ursprünglich 50 Tage nach Ostern gezählt.
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.
Beispiel Rosenmontag 2012
F = 131 – 48 = 83
G = 83 + 83 / 154 – 92 / 83 * (3 – SJ) = 83 –0 –1*(3 –1) = 81 , weil 2012 Schaltjahr ist SJ = 1 (Februar nur 28 bzw. 29 Tage, z.B. bei kein Schaltjahr –3)
Tag = 1 + 81 MOD 31 = 1 + 19
Monat = 81 / 31 = 2 Rosen Montag ist am 20.2.2012
(8) Berechnung der anderen beweglichen Feiertage mit der
Osterkennzahl (gilt für alle Jahre)
Buß- und Bettag, Advent,
Totensonntag, Volkstrauertag, Muttertag und auch Beginn und Ende der
Sommerzeit.
Weil
Ostern und Advent vom Jahr abhängen,
hängt auch Advent von Ostern ab.
Diese
Tage haben keine feste Distanz zu Ostern wie z.B. Pfingsten, aber sie hängen
trotzdem an Ostern, weil dessen Sonntag mit dem Datum verkoppelt ist.
Wenn
die Osterkennzahl für die Berechnung von Ostern ohnehin bereits festliegt, dann
ist sinnvoll auch andere Feiertage mit meinen folgenden Formeln zu bestimmen.
Die
Formeln sind kurz und sehr einfach, weil Jahr und Schaltjahr bereits in der
Osterkennzahl enthalten sind.
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, ....., E= 137 für 2199.
Die Osterkennziffer 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), ...
E MOD 7 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).
Einfaches Rechnen: Die Osterkennziffer
E MOD 7 kann in die Formeln eingesetzt werden. Bei (E + 2) MOD 7 wird sie
für E eingesetzt.
Datum zum Wochentag berechnen mit
Osterkennzahl (gilt für alle Jahre)
Im Folgenden liegt der Wochentag (Mittwoch, Sonntag, usw.) fest
und es wird das zugehörige Datum (Tag) gesucht.
Berechnung des Buß- und Bettags 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 (möglich ist 16. bis 22.11.)
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 ' Korrekturmöglichkeit auf 1. Sonntag im Mai
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 vom 10. bis 14. Mai.
Berechnung Datum Sommerzeit Winterzeit (mit Osterkennzahl E)
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 Advent (mit Osterkennzahl E)
Tag = 18 + E MOD 7 ' Datum Tag für 4. Advent im Dezember, frühest möglicher Tag ist 18 und spätest möglicher Tag ist 18+6 = 24. Dezember
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
Frühest möglicher Tag ist 1+26 = 27. Nov. bei E MOD 7 = 0 und spätest möglicher Tag ist 3.12. bei E MOD 7 = 6.
Monat = 12 – Tag / 27 ' Datum Monat zu Tag der Adventsonntage (Dezember / November)
Berechnung
Datum Totensonntag (Ewigkeitssonntag) und Volkstrauertag
(mit Osterkennzahl E)
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 (möglich ist 13. bis 19.11.)
Das früheste und späteste Datum
wird
berechnet mit den Rest der Division bei ... MOD 7. Die Grenzwerte 0 und 6
führen zum Ergebnis.
Der
frühest mögliche Tag ergibt sich bei Grenzwert 0. Entsprechend ergibt sich auch der spätest mögliche Termin bei +6
Tage.
(9) Wochentag
zu einem Datum berechnen mit Osterkennzahl (gilt für alle Jahre
entsprechend Osterkennzahl)
Im Folgenden liegt das Datum
fest und es wird der zugehörige Wochentag (Mittwoch, Sonntag, usw.) gesucht.
Weil
Ostern und Weihnachten vom Jahr abhängen, hängt auch Weihnachten von Ostern ab.
Mit Ostern wird hier z.B. der Wochentag von Weihnachten berechnet. Dabei ist das Jahr beliebig, weil es schon in der Osterkennzahl berücksichtigt wurde.
Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
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 E = 147 für 2011:
WoTag = 6 – E MOD 7 = 6 –147 MOD 7 = 6 –0 = 6 ' (24.12.2011 ist ein Samstag).
In welchem Jahr fällt 24.12. (Weihnachten,
Heiligabend) auf Sonntag?
Bei E MOD 7 = 6 ist WoTag = 6 – 6 = 0. siehe
obige Tabelle: Jahr 2017 (6)
Der Niederländische Königinnentag liegt auf dem 30.4. 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.
Wochentag vom 1. Weihnachtsfeiertag 25.12. oder Tag der Arbeit 1. Mai gleiches Jahr oder 1. Januar nächstes Jahr
WoTag = 6 – ( E + 6 ) MOD 7 ' Wochentag 1. Weihnachtstag 25.12. oder 1. Mai
WoTag = 6 * E MOD 7 ' alternative Formel für Wochentag 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. (Jahr) mit
Osterkennzahl des gleichen Jahres
WoTag = 6 – ( E + 2 + SJ ) MOD 7 ' Wochentag Heilige Drei Könige 6.1.
Wochentag zu
Heilige Drei Könige 6.1. (Jahr) mit
Osterkennzahl des Vorjahres
WoTag = 6 – ( E + 1 ) MOD 7 ' Wochentag Heilige Drei Könige 6.1.
Schaltjahr SJ muss nur bei Januar/Februar mit Osterkennzahl des gleichen Jahres berücksichtigt werden, weil eventuell der 29. Februar zwischen Ostern und 6. Januar liegt.
Allgemein
als Tag 0 bis 6 (So, Mo, Di, Mi, Do, Fr, Sa)
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 ' Monatszahl M ist März = 1 bis Februar = 12
KT = M * 31 / 12 + M / 11 * (6 – SJ) ' Korrekturwert Tag je nach Monat
WoTag = 6 – ( E – Tag – KT ) MOD 7 ' Wochentag für beliebiges Datum
Beispiel: Valentinstag 14.2.2012 ( Osterkennzahl E = 131), SJ = 1 (Schaltjahr)
M = 1 + (2 + 9) MOD 12 = 12
KT = 12 * 31 / 12 + 12 /11 * (6 –1) = 31+ 5 = 36
WoTag = 6 – (131 –14 – 36) MOD 7 = 6 – 4 = 2 ( Dienstag 14.2.2012)
Formel für alle Jahre, weil ( –14 –37) MOD 7 = –2 feststeht: Wegen Negativ wird 7 addiert = 5
Valentinstag: WoTag = 6 – ( E + 5 + SJ ) MOD 7
alternativ WoTag = ( 1 – SJ
+ 6 * E ) MOD 7
2.2.24) Datum mit Jahreszahl berechnen
Der Wochentag (Mittwoch, Sonntag,
usw.) liegt fest und es wird das zugehörige Datum (Tag) gesucht.
(1) Buß- und Bettag mit Jahreszahl berechnen
Jahr 2-stellig für Jahr 2000 bis 2099
Buss_Bet_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
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.
(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
(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
Tag = 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 (year 2-stellig) 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 (year 2-stellig) 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 2000 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)
2-stellig für 2000 bis 2099 oder
4-stellig für 1900 bis 2099 oder beliebiges Jahr mit Osterkennzahl
(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)
Tag = 21 – (3 + Jahr *5 / 4) MOD 7 ' Datum Tag für Sonntag spätestens am 21. 9. (Jahr 4-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 = 11 – (3 + Jahr *5 / 4) MOD 7 ' Datum Tag für Donnerstag spätestens am 11. 9. (Jahr 4-stellig)
Tag = 5 + (E + 3) MOD 7 ' mit Osterkennzahl E, Datum Tag für Donnerstag frühestens am 5.9.
(3)
Berner Zwiebelmarkt
am 4. 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.
2.2.26) Datum
sonstiger Feiertage oder Sondertage selber bestimmen (siehe Ergänzung und
Erläuterung)
2.2.27)
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 ------------ nach_oben
--------------------- weiter zu Teil 3 Teil 4 zurück zu Tipps und Tricks Teil_1 Startseite
Für Rückfragen und Hinweise: Datum@M.Wilzeck.de