Wochentagsberechnung
Die Wochentagsberechnung (auch Kalenderrechnen genannt) hat zum Ziel, zu einem beliebigen Datum in der Vergangenheit oder Zukunft den Wochentag zu bestimmen. Es gibt dabei verschiedene Methoden, die auf mathematischen Algorithmen beruhen.
Auch ohne Berechnung lässt sich aus Dauer- bzw. Ewigen Kalendern für ein beliebiges Jahr – oder zumindest für einen sehr großen Zeitraum – der zu einem Datum gehörende Wochentag ablesen. Diese Kalender können auch zur Ergebniskontrolle der Algorithmen verwendet werden.
Einführung
Um den Wochentag mit Hilfe einer Formel zu berechnen, werden die sieben Wochentage einer Woche durchnummeriert, etwa von Montag = 1 bis Sonntag = 7 (dies entspricht der Norm ISO 8601). Benötigt wird für die Berechnung der Modulo: Er gibt den Rest an, der bei einer ganzzahligen Division übrig bleibt (z. B. 15 mod 7 = 1, denn 15 / 7 ist 2, Rest 1). Für die Wochentagsberechnung wichtig ist insbesondere der Rest modulo 7, den man so interpretieren kann: Ist der 1. Tag eines Monats ein Sonntag, dann ist 7 Tage später, am 8. Tag des Monats, ebenfalls ein Sonntag, da 7 mod 7 = 0. Ebenso ist etwa der 16. Tag des Monats ein Montag, da 15 mod 7 = 1.
Als Grundidee der meisten Algorithmen startet man nun bei einem Datum, für das der Wochentag bekannt ist, dann wird die Anzahl der Tage bis zu dem gesuchten Datum bestimmt. Hierbei müssen u. a. die unterschiedlichen Längen der Monate und die Anzahl der Schaltjahre berücksichtigt werden. Bezüglich der Schaltjahre unterscheiden sich die Verfahren für den gregorianischen und den julianischen Kalender. Aus der Anzahl der Tage seit dem gewählten Starttag kann schließlich mit einer Modulo-7-Rechnung wie oben beschrieben der Wochentag bestimmt werden.
Algorithmus
Der folgende Algorithmus wurde im Jahr 1882 von Christian Zeller angegeben.[1][2] Für eine Beschreibung oder Herleitung in Dezimalzahlenschreibweise (13/5=2,6 und 1/5 =0,2) siehe Georg Glaeser.[3]
Formel
Die Berechnung des Wochentages erfolgt nach folgender Formel:
Hierbei wird mit mod die Modulo-Operation bezeichnet. Ist das Ergebnis negativ, wird 7 addiert (Beispiel: -19 mod 7 = -5 + 7 = 2). Die eckige Klammer Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \lfloor x \rfloor} ist die Gaußklammer: Sie gibt die größte ganze Zahl kleiner oder gleich x an, rundet also ab.
Die Variablen haben folgende Bedeutung:
- d
- Tagesdatum (1 bis 31)
- m
- Monat gemäß unten angeführter Tabelle
- y
- Die beiden letzten Stellen der Jahreszahl, bei den Monaten Januar und Februar die letzten Stellen des Vorjahres (für Dez. 1907 also 7, für Jan 1907 6, für Jan 1900 99)
- c
- Die beiden ersten Stellen der Jahreszahl, bei den Monaten Januar und Februar die ersten Stellen des Vorjahres (für Dez. 1907 also 19, für Jan 1907 19, für Jan 1900 18)
- w
- Wochentag gemäß folgender Tabelle:
Tag Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag w 0 1 2 3 4 5 6
Der Monat m wird in julianischer Zählung angegeben, damit der Schaltmonat Februar mit seiner Unregelmäßigkeit am Ende des Jahres steht. Es ergibt sich folgende Tabelle:
Monat März April Mai Juni Juli August September Oktober November Dezember Januar Februar m = 1 2 3 4 5 6 7 8 9 10 11 12 [2,6 m - 0,2] mod 7 = 2 5 0 3 5 1 4 6 2 4 0 3
Demzufolge währt ein Jahr von März bis Februar. Da für Januar und Februar m = 11 bzw. m = 12 gilt, muss für diese beiden Monate die Jahreszahl bei der Berechnung um 1 vermindert werden.
Beispiele
12. Juni 2006:
d = 12 m = 4 y = 6 c = 20
A = 12 + [2.6*4 – 0.2] + 6 + [6/4] + [20/4] – 2*20 A = 12 + 10 + 6 + 1 + 5 - 40 A = -6 w = -6 mod 7 w = 1 entspricht Montag.
12. Januar 2006: Hier muss die Variable y um 1 auf 5 vermindert werden:
d = 12 m = 11 y = 5 c = 20
A = 12 + [2.6*11 – 0.2] + 5 + [5/4] + [20/4] – 2*20 A = 12 + 28 + 5 + 1 + 5 - 40 A = 11 w = 11 mod 7 w = 4 entspricht Donnerstag.
1. Januar 2000: Hier muss die Variable y auf 99 und c auf 19 vermindert werden:
d = 1 m = 11 y = 99 c = 19
A = 1 + [2.6*11 – 0.2] + 99 + [99/4] + [19/4] – 2*19 A = 1 + 28 + 99 + 24 + 4 - 38 A = 118 w = 118 mod 7 w = 6 entspricht Samstag.
Herleitung der Formel
Die Herleitung erfolgt in vier Schritten:
1. Formel, die nur für einen Monat gilt
(1) w = (d + k1) mod 7
w ist dabei der gesuchte Wochentag, d das Tagesdatum (1–31). k1 ist ein Korrektursummand, der für jeden Monat angibt, auf welchen Wochentag der Vormonat endete. Mod 7 gibt den kleinsten positiven Rest beim Teilen durch 7 an, dabei kann das Ergebnis nur im Bereich von 0 bis 6 liegen. Beispielrechnung: 22 : 7 = 3 Rest 1, also 22 mod 7 = 1.
Beispiel
Zur Berechnung des Wochentags vom 17. August 2007 muss man wissen, dass der Juli 2007 mit einem Dienstag endete, also d = 17 und Korrektursummand k1 = 2. Man berechnet:
w = (17 + 2) mod 7 = 19 mod 7 = 5 5 entspricht Freitag.
2. Formel, die für ein ganzes Jahr gilt
Nun hat man für jeden Monat eine unterschiedliche Formel. Um zu einer Formel zu gelangen, die für ein Jahr lang gültig ist, legt man zuerst den März als ersten Monat des (julianischen) Jahres fest (m = 1). Mit dieser julianischen Monatszählung umgeht man das Problem, dass der unregelmäßige Schalttag 29. Februar mitten im Jahr liegt und die Formel "stört" bzw. verkompliziert. Da die Monate mit verschiedenen Wochentagen beginnen, benötigt man anstatt des Korrektursummanden k1 eine "Sprungfunktion" s, die für jeden Monat den korrekten Wochentag des Vormonats liefert. Dazu wird untersucht, wie der Wochentag des 1. März zu jedem anderen Monatsbeginn "weiterspringt":
Monatswechsel... Monatszahl Sprung um... aufsummiert s(m) = von März auf April m = 2 3 Tage 3 Tage 3 mod 7 von April auf Mai m = 3 2 Tage 5 Tage 5 mod 7 von Mai auf Juni m = 4 3 Tage 8 Tage 1 mod 7 von Juni auf Juli m = 5 2 Tage 10 Tage 3 mod 7 von Juli auf August m = 6 3 Tage 13 Tage 6 mod 7 von August auf September m = 7 3 Tage 16 Tage 2 mod 7 von September auf Oktober m = 8 2 Tage 18 Tage 4 mod 7 von Oktober auf November m = 9 3 Tage 21 Tage 0 mod 7 von November auf Dezember m = 10 2 Tage 23 Tage 2 mod 7 von Dezember auf Januar m = 11 3 Tage 26 Tage 5 mod 7 von Januar auf Februar m = 12 3 Tage 29 Tage 1 mod 7 (von Februar auf März) m = 1 0 oder 1 d 29 oder 30 d 1 oder 2
Insgesamt springt der Monatsbeginn vom 1. März bis zum 1. Februar um 29 Wochentage weiter, in den 11 Monatssprüngen also durchschnittlich um 29 / 11 ≈ 2,6 Wochentage.
Die gesuchte Sprungfunktion s soll also für m die Werte in der Spalte s(m) liefern. Dafür steht der Term
[2,6 m] mod 7
Hierbei wird 2,6 mit m multipliziert, die Nachkommastellen mittels der Gaußklammer [ ] „abgeschnitten“ und anschließend mod 7 reduziert. Da die Ergebnisse alle um 2 zu hoch sind, wird 2 abgezogen:
([2,6 m] – 2) mod 7
Dann sind die Werte von m = 5 und m = 10 aber noch um 1 zu groß. Man muss die Formel so verändern, dass die Ergebnisse nur an diesen zwei Stellen korrigiert werden: Dafür müssen die Ergebnisse in den Gaußklammern dieser beiden Monate Juli und Dezember um 1 verringert, die anderen Ergebnisse dürfen aber nicht verändert werden. Bei m = 5 und m = 10 ergibt sich für den Wert innerhalb der Gaußklammer immer eine ganze Zahl, bei den anderen Monaten ein um mindestens 0,2 über einer Ganzzahl liegender Wert. Man zieht also einen Wert größer 0 und kleiner gleich 0,2 ab; meistens wird 0,2 gewählt:
s(m) = ([2,6 m - 0,2] – 2) mod 7
Wenn man s(m) anstatt des Korrektursummanden k1 in die obige Formel (1) einsetzt, erhält man als Wochentagsformel, die ein Jahr lang gültig ist:
(2) w = (d + [2,6 m - 0,2] - 2 + k2) mod 7
Der Korrektursummand k2 gibt dabei den Wochentag vom Vortag des 1. März des betreffenden Jahres an.
Beispiel
Die folgende Wochentagsformel für 2007 ist gültig vom 1. März 2007 bis zum 29. Februar 2008. Da der Vortag des 1. März 2007 ein Mittwoch ist, gilt k2 = 3:
w = (d + [2,6 m - 0,2] - 2 + 3) mod 7 = (d + [2,6 m - 0,2] +1) mod 7
3. Formel, die für ein ganzes Jahrhundert gilt
Nun muss man die Formel (2) so variieren, dass sie über mehrere Jahre hinweg gültig ist. Dazu muss der Wochentag in jedem Jahr um einen Tag "weitergeschoben" werden, da ein Normaljahr aus 52 Wochen und einem Tag besteht. In jedem Schaltjahr muss der Wochentag um 2 Tage vorrücken.
y steht für die letzten beiden Ziffern des Jahres (bei 1992 also y = 92). Da es alle vier Jahre ein Schaltjahr gibt, muss man noch y/4 addieren. Dabei würde sich bei 1995 zum Beispiel 95/4 = 23,75 ergeben. Weil man aber eine ganze Zahl benötigt, setzt man den Term in die Gaußklammer: [y/4]; diese "schneidet" die Ziffern hinter dem Komma ab. 23,75 in der Gaußklammer wird also zu 23, denn im 20. Jahrhundert gab es vor 1995 genau 23 Schaltjahre.
Setzt man nun den Term y + [y/4] anstelle des Korrektursummanden k2 in die Formel (2) ein, erhält man eine Wochentagsformel, die für ein Jahrhundert gültig ist:
(3) w = (d + [2,6 m - 0,2] - 2 + y + [y/4] + k3) mod 7
Der Korrektursummand k3 gibt dabei den Wochentag an, mit dem das vorausgegangene Jahrhundert endete.
Beispiele
2000 war ein Schaltjahr. Der Vortag des 1. März 2000, der 29. Februar 2000, war ein Dienstag, also k3 = 2. Folglich lautet die Wochentagsformel für das 21. Jahrhundert:
w = (d + [2,6 m - 0,2] - 2 + y +[y/4] + 2) mod 7
Sie ist gültig vom 1. März 2000 bis zum 28. Februar 2100.
1900 war kein Schaltjahr. Der Vortag des 1. März 1900, der 28. Februar 1900, war ein Mittwoch, also k3 = 3. Folglich lautet die Wochentagsformel für das 20. Jahrhundert:
w = (d + [2,6 m - 0,2] - 2 + y +[y/4] + 3) mod 7
Sie ist gültig vom 1. März 1900 bis zum 29. Februar 2000.
4. Allgemeingültige Formel
Nun muss die Formel (3) noch kompatibel für mehrere Jahrhunderte gemacht werden. Im gregorianischen Kalender sind Jahre, welche ohne Rest durch 100, aber nicht durch 400 teilbar sind, keine Schaltjahre. Dagegen bleiben durch 400 teilbare Jahre Schaltjahre, wie auch alle anderen durch 4, aber nicht durch 100 teilbaren Jahre.
Die Anzahl dieser besonderen alle 400 Jahre auftretenden Schaltjahre berechnet man mit der Formel [c/4], wobei c für die ersten beiden Ziffern in der vierstelligen Jahresangabe steht, von c/4 wird wieder die Gaußklammer [ ] gebildet. Im Jahr 1963 (c = 19, y = 63) ergibt sich z. B. [19/4] = 4.
Weiterhin muss bedacht werden, dass bei den Sprüngen "über das Jahrhundert hinweg" der Wert von y + [y/4] jedes Mal von 99 + 24 = 123 = 4 mod 7 zu 00 + 0 = 0 wird. Dieser Wert darf jedoch nicht 0, sondern muss 5 sein, da mit der Jahreszahl auch der Wochentag um 1 vorrückt. Diese 5 muss bei jedem Jahrhundertwechsel addiert werden. Da 5 = −2 mod 7 gilt, entspricht der Sprung von +5 gerade −2. Daher kann man die Nullung von y + [y/4] und den hinzugekommenen Tag bei den Jahrhundertsprüngen durch den Summanden −2c ausgleichen.
In der Formel (3) kann man nun den Korrektursummanden k3 folgendermaßen ersetzen:
k3 = [c/4] − 2c + k4
Über die Wahl von k4 muss die Formel noch "justiert" werden. Die bisherige Formel liefert für den 15. Oktober 1582 einen Mittwoch, es war aber ein Freitag. Also gilt k4 = 2, was zusammen mit der bisherigen −2 zufälligerweise 0 ergibt. Insgesamt erhält man also die gesuchte Wochentagsformel:
w = (d + [2,6 m – 0,2] + y + [y/4] + [c/4] – 2c) mod 7
Programmierung
Das folgende Skript kann direkt in der Programmierumgebung LabVIEW in einer Formula Node, oder mit Modifikationen auch in anderen Programmiersprachen eingesetzt werden. Es verwendet gregorianische statt julianische Daten (Januar = 1, Dezember = 12) und enthält bereits die Verringerung der Jahreszahl y für Januar und Februar; Jahres- und Monatszahlen können also unverändert aus dem gregorianischen Datum übernommen werden. Das Skript gibt die Wochentagszahl w in deutscher Norm aus: Montag = 1, Sonntag = 7. Zudem werden die Ergebnisse des Modulo-Operators "%" korrigiert, falls dieser nicht der üblichen mathematischen Konvention folgt, dass das Vorzeichen des Ergebnisses gleich dem des Teilers ist. "%" ist hier der Modulo-Operator, "floor ()" die Gaußklammer zum Abrunden. Der Parameter y enthält die komplette Jahreszahl, nicht nur deren letzte beiden Stellen; m und d sind wie oben die Monats- und die Tageszahl.
if (m < 3) y = y - 1; w = ((d + floor (2.6 * ((m + 9) % 12 + 1) - 0.2) + y % 100 + floor (y % 100 / 4) + floor (y / 400) - 2 * floor (y / 100) - 1) % 7 + 7) % 7 + 1;
Eine Methode zum Kopfrechnen
Unter der Annahme, dass sich ein Datum nach folgendem Schema zusammensetzt:
- Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle T.M.J_\text{h}J_\text{z} } ,
wobei Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle J_\text{h}} die ersten beiden Stellen der vierstelligen Jahreszahl darstellen und Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle J_\text{z}} die letzten zwei, kann man folgende fünf Werte eines Datums berechnen:
Tagesziffer
Die Tagesziffer Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle N_\text{T}} : sie ist der Tag im Monat modulo 7:
- Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle N_\text{T} = T \bmod 7}
Monatsziffer
Die Monatsziffer Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle N_\text{M}} , die man sich merken muss:
Monat Jan Feb Mär Apr Mai Jun Jul Aug Sep Okt Nov Dez 0 3 3 6 1 4 6 2 5 0 3 5
Im Januar fängt es mit der Null an. Die Ziffern der anderen ergeben sich aus den Resten des Vormonats:
- Der Januar hat 31 Tage, und 31 mod 7 = 3, deshalb hat der Februar die 3 (Rest vom Januar) + 0 = 3.
- Der Februar hat 28 Tage, und 28 mod 7 = 0, und für den März wird diese 0 zur 3 vom Februar addiert, und das ergibt wieder die 3.
- Der März hat 31 Tage, 31 mod 7 = 3, und 3 + 3 = 6, also ist die Merkziffer für April die 6.
- Der April hat 30 Tage, 30 mod 7 = 2 und 6 + 2 = 8, und 8 mod 7 = 1, also ist die Merkziffer für den Mai die 1 usw.
Wenn man eine Monatsziffer vergessen hat, kann man sie sich so wieder ausrechnen.
Jahresziffer
Für die Jahresziffer Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle N_\text{Jz}} wird das Jahr im Jahrhundert, also nur die letzten beiden Ziffern der Jahreszahl, zum abgerundeten Ganzzahlergebnis der Division durch 4 derselben Zahl addiert. Diese Summe dividiert man dann modulo 7:
- Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle N_\text{Jz} = (J_\text{z} + (\lfloor J_\text{z}\operatorname{div} 4\rfloor))\bmod 7}
Es ergeben sich dabei beispielhaft folgende Ziffern für das Jahr im Jahrhundert:
Jahr 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Ziffer 0 1 2 3 5 6 0 1 3 4 5 6 1 2 3 4 6 0 1 2 4 5 6 0 2 3 4 5 0
Es wird immer um 1 weitergezählt, in Schaltjahren um 2, nach der 6 geht es wieder mit der 0 weiter.
Diese Ziffern wiederholen sich alle 28 Jahre, ..28 hatte also dieselbe Ziffer wie ..56 und ..84.
Beispiel für 1950:
50 + (50 div 4) = 50 + 12 = 62, darein geht die 7 genau 8 Mal. 7 · 8 = 56 und 6 bleiben als Rest. Die Jahresziffer für 1950 ist also die 6. Da die Jahresziffer von ..50 die gleiche ist wie die von ..78 oder von ..22 (78 = 50 + 28, 22 = 50 − 28), kann man die Berechnung der Jahresziffer in diesem Fall auch mit kleineren Zahlen bewerkstelligen: Die Jahresziffer von 1950 ist die gleiche wie die von 1922, also 22 + (22 div 4 = 5) = 27 = 3 · 7 + 6; auch hier erhält man natürlich als Jahresziffer die 6.
Jahrhundertziffer
Die ersten beiden Ziffern der Jahreszahl sind Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle J_\text{h}} . Die Formel für die Jahrhundertziffer ist:
Dementsprechend ist die Jahrhundertziffer:
- 0 für alle Jahre, die mit 15 *), 19, 23, 27 anfangen.
- 2 für alle Jahre, die mit 18, 22, 26 anfangen.
- 4 für alle Jahre, die mit 17, 21, 25 anfangen.
- 6 für alle Jahre, die mit 16, 20, 24 anfangen.
Anmerkung: Die Jahrhundertziffer ist nicht identisch betreffs der Zugehörigkeit zum Jahrhundert. Das 20. Jahrhundert zum Beispiel umfasst die Jahre 1901 bis 2000, so dass das letzte Jahr des 20. Jahrhunderts im Gegensatz zu den anderen 99 Jahren die Jahrhundertziffer 20 hat.
*) Gilt erst ab dem 15. Oktober 1582, dem ersten Tag des Gregorianischen Kalenders. Vorher waren auf päpstliche Anordnung 10 Tage ausgefallen, so dass sich Datumsangaben vor dem 15. Oktober 1582 nicht nach dieser Methode berechnen lassen. Für Länder, in denen der Gregorianische Kalender später eingeführt wurde, gilt entsprechend ein anderes, späteres Grenzdatum, z. B. für die Türkei der 1. März 1917, vor dem diese Methode nicht mehr funktioniert.
Der Zyklus von 400 Jahren im gregorianischen Kalender hat 146097 Tage, und diese Zahl ist durch 7 teilbar. Die Zuordnung der Wochentage zu den Daten wiederholt sich also alle 400 Jahre, das Jahr 2004 z. B. hat dieselben Wochentage wie 1604, 2404, 2804 usw.
Schaltjahreskorrektur
Wir haben bisher den Schalttag dem ganzen Jahr zugerechnet, die Rechnung stimmt also erst ab dem 1. März. Wenn das Datum im Januar oder Februar eines Schaltjahrs liegt, ist Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle N_\text{Sj} = -1} (oder 6, da immer modulo 7 gerechnet wird), ansonsten Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle N_\text{Sj} = 0} .
Ergebnis
Wenn man diese 5 Zahlen addiert und den Rest bei Division durch 7 ermittelt, erhält man den Wochentag :
- Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle W = (N_\text{T} + N_\text{M} + N_\text{Jh} + N_\text{Jz} + N_\text{Sj})\bmod 7}
Anhand des numerischen Ergebnisses Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle W} kann nun der Wochentag bestimmt werden:
0 1 2 3 4 5 6 Tag So Mo Di Mi Do Fr Sa
Bei all diesen Additionen kann man immer gleich mod 7 rechnen, also
- statt eine 1 zu addieren, kann man 6 abziehen
- statt eine 2 zu addieren, kann man 5 abziehen
- statt eine 3 zu addieren, kann man 4 abziehen
- statt eine 4 zu addieren, kann man 3 abziehen
- statt eine 5 zu addieren, kann man 2 abziehen
- statt eine 6 zu addieren, kann man 1 abziehen
Man hat es dann nur mit Zahlen von 0 bis 6 zu tun, so dass Finger als Rechenhilfe ausreichen.
Beispiele
14. Juli 1789
- 14 mod 7 = 0
- Juli hat die Merkziffer 6
- ..89 Merkziffer 6
- 17.. Merkziffer 4
- keine Schaltjahrkorrektur, also 0
- (0 + 6 + 6 + 4 + 0) mod 7 = 2.
Die Bastille wurde an einem Dienstag erstürmt.
23. Mai 1949
- 23 mod 7 = 2
- Mai 1
- ..49 5
- 19.. 0
- 0
- (2 + 1 + 5 + 0 + 0) mod 7 = 1.
Die Bundesrepublik Deutschland wurde an einem Montag gegründet.
18. Januar 1892
- 18 mod 7 = 4
- Jan 0
- ..92 3
- 18.. 2
- Schaltjahrkorrektur! 6
- (4 + 0 + 3 + 2 + 6) mod 7 = 1
Oliver Hardy wurde an einem Montag geboren.
9. November 1989
- 9 mod 7 = 2
- Nov. 3
- ..89 6
- 19.. 0
- 0
- (2 + 3 + 6 + 0 + 0) mod 7 = 4
Der Mauerfall war an einem Donnerstag.
Vereinfachungen beim Kopfrechnen
Mit der beschriebenen Formel ist das Ausrechnen des Wochentags im Kopf prinzipiell möglich. Um die Berechnung zu beschleunigen und solche Ergebnisse zu erreichen wie unten im Abschnitt „Sport“ beschrieben, sind unter anderem die folgenden Vereinfachungen möglich:
Die Reihenfolge der Schritte (Tag → Monat → Jahr → Jahrhundert → Schaltjahr) muss nicht streng eingehalten werden, da bei der Addition das Assoziativgesetz gilt. Je nach Empfinden kann die Reihenfolge beliebig geändert werden. Dabei ist es sinnvoll, die Schritte in der Reihenfolge auszurechnen, dass die Zwischenergebnisse 7 ergeben. Wenn beim Rechnen erkannt wird, dass beispielsweise Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle N_\text{Jz} = 5} und Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle N_\text{T} = 2} ist, so können diese beiden Schritte weggelassen werden (da 7 mod 7 = 0). Mit einiger Erfahrung in der Anwendung dieser Formel kann man solche Situationen erkennen und die Formel entsprechend in anderer Reihenfolge ausführen.
Zudem sind in den meisten Situationen nicht alle Daten gleich wichtig. Beim Anwenden im Alltag kommt es weitaus häufiger vor, den Wochentag von Daten im aktuellen oder dem nächsten Jahr zu berechnen als in weit zurückliegenden Jahren. Wenn das der Fall ist, ist es sinnvoll, die Summe von und Fehler beim Parsen (MathML mit SVG- oder PNG-Rückgriff (empfohlen für moderne Browser und Barrierefreiheitswerkzeuge): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle N_\text{Jh}} mod 7 für beispielsweise die Jahre 2019 und 2020 zu berechnen und auswendig zu lernen. Dies kann die Anwendung im Alltag vereinfachen, da insgesamt weniger auswendig gelernt werden muss — gleichwohl ist der Anwendungszeitraum der Formel damit beschränkt auf die gelernten Jahre.
Ergebniskontrolle
Eine einfache und sichere Methode der Kontrolle der Ergebnisse stellt der abgebildete Ewige Kalender dar.
Geschichte
Die erste rechnerische Methode zur Wochentagsbestimmung stammt von Carl Friedrich Gauß (1777–1855). In einer handschriftlichen Notiz beschrieb er eine Formel, mit der man den Wochentag des 1. Januars eines beliebigen Jahres berechnen kann, die er selbst jedoch nie veröffentlichte. Er war vielmehr an der verwandten und deutlich komplexeren Berechnung des Osterdatums interessiert, eine Problemstellung, die die Mathematiker bereits seit den Anfängen des Christentums beschäftigte. Hierzu veröffentlichte er die sogenannte Gaußsche Osterformel.
Gegen Ende des 19. Jahrhunderts gab es ein größeres Interesse an der Wochentagsberechnung. Im Jahr 1882 publizierte der Mathematiker und Theologe Christian Zeller eine Formel (siehe Zellers Kongruenz), mit der man den Wochentag zu einem beliebigen Datum berechnen konnte. Eine weitere Veröffentlichung zu diesem Thema ist von Lewis Carroll in der Zeitschrift Nature im Jahr 1887.[4] Darin schreibt Carroll: „Ich selbst bin kein Schnellrechner und durchschnittlich brauche ich ca. 20 Sekunden, um eine gestellte Frage zu beantworten; ich zweifle aber nicht daran, daß ein wirklicher Schnellrechner zur Antwort noch nicht einmal 15 Sekunden benötigen würde.“ [5]
Weitere Verfahren
- Gaußsche Wochentagsformel zur Berechnung des Wochentages des 1. Januars eines Jahres.
- Zellers Kongruenz zur Berechnung von Wochentagen.
- Doomsdaymethode zur Berechnung von Wochentagen durch einfaches Kopfrechnen.
- Kalender von Tupjakow zur Berechnung von Wochentagen durch Auswahl eines von 14 möglichen Jahreskalendern.
- Gaußsche Osterformel zur Berechnung der beweglichen Feiertage.
- Oft wird in Computersystemen die Anzahl Zeiteinheiten seit einem Referenztag (Englisch auch epoch) gespeichert. Für R zum Beispiel Sekunden seit dem 1. Januar 1970.[6] In Microsoft Excel die Tage seit dem 1. Januar 1900.[7] Bei Excel muss beachtet werden, dass fälschlicherweise das Jahr 1900 als Schaltjahr angenommen wird, daher sind die Anzahl Tage ab dem 1. März 1900 um eins zu hoch und Wochentage vor diesem Tag falsch.[8] In SAS werden die Tage seit dem 1. Januar 1960 gespeichert.[9][10] Als Beispiel erhält man in R für den 1. Januar 2021 18628 Tage,
tage<-unclass(as.POSIXct(strptime("2021-01-01", "%Y-%m-%d"),tz="UTC" ))/3600/24
. Modulo 7 erhält man 1. Da der 1. Januar 1970 ein Donnerstag war, weiß man nun, dass der 1. Januar 2021 ein Freitag ist. Mit(tage+4) %% 7
erhält man die Wochentagnummerierung von Zeller, also 0 für Sonntag usw.
Sport
Bei den seit 2004 im zweijährlichen Rhythmus stattfindenden Weltmeisterschaften im Kopfrechnen ist Kalenderrechnen eine Disziplin. Innerhalb von einer Minute müssen möglichst viele Wochentage zu Daten zwischen 1600 und 2100 bestimmt werden. Es wird dabei der beste von 2 Versuchen gewertet.
Jahr | Name | Land | Ergebnis |
---|---|---|---|
2004 | Matthias Kesselschläger | Deutschland | 33 |
2006 | Matthias Kesselschläger | Deutschland | 35 |
2008 | Jan van Koningsveld | Deutschland | 40 |
2010 | Yusnier Viera | Kuba | 48 |
2012 | Myagmarsuren Tuuruul | Mongolei | 57 |
2014 | Marc Jornet Sanz | Spanien | 64 |
2016 | Georgi Georgiev | Bulgarien | 66 |
2018 | Marc Jornet Sanz | Spanien | 71 |
Der Weltrekord liegt bei 140 Daten in einer Minute und wurde 2018 von Yusnier Viera aus den Vereinigten Staaten (ehemals Kuba) aufgestellt.[12]
Einzelnachweise
- ↑ Vgl. Christian Zeller: Die Grundaufgaben der Kalenderrechnung auf neue und vereinfachte Weise gelöst. In: Württembergische Vierteljahrshefte für Landesgeschichte 5 (1882), 314f.
- ↑ Dietmar Herrmann: Algorithmen Arbeitsbuch 1. Auflage 1992, Addison-Wesley, ISBN 3-89319-481-9
- ↑ Georg Glaeser: Der mathematische Werkzeugkasten. Anwendungen in Natur und Technik. 3. Auflage. Elsevier, München 2008, ISBN 3-8274-1618-3, siehe S. 408
- ↑ Lewis Carroll: "To Find the Day of the Week for any Given Date" in „Nature“, Band 35, vom 31. März 1887, Seite 517
- ↑ Martin Gardner: Mathematischer Karneval, Kapitel: „Tricks der Schnellrechner“
- ↑ https://stat.ethz.ch/R-manual/R-devel/library/base/html/as.POSIXlt.html
- ↑ https://support.microsoft.com/en-us/office/date-systems-in-excel-e7fe7167-48a9-4b96-bb53-5612a800b487
- ↑ https://docs.microsoft.com/en-us/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year
- ↑ https://support.sas.com/publishing/pubcat/chaps/59411.pdf
- ↑ https://www.sas.com/de_ch/training/home/expertentipps/expertentipp-berechnen-von-datumswerten-in-vergangenheit-und-zukunft.html
- ↑ http://www.recordholders.org/de/events/worldcup/
- ↑ http://www.recordholders.org/en/records/dates.html
Weblinks
- Wochentagsrechner auf www.rechner24.com
- Kalenderrechnen.de mit Vereinfachungen der Wochentagsformel beim Kopfrechnen
- Eine einfache Methode, den Wochentag im Kopf zu ermitteln
- World records for mentally calculating the day of the week in the Gregorian Calendar
- National records for finding Calendar Dates
- World Ranking of Memoriad Mental Calendar Dates (all competitions combined)
- Identische Kalenderjahre