Wochentagsberechnung im Kopf
Wer hat sich nicht schon einmal gefragt an welchem Wochentag er geboren wurde oder auf was für einen Tag heuer Silvester fällt. iich habe mir dazu ein kleines Schema überlegt, das zu einem beliebigen Datum den Wochentag bestimmt und mit relativ kleinem Lernaufwand im Kopf anwendbar ist.
Das Rechenschema
Anhand der nachstehenden Herleitung ergibt sich das Rechenschema aus Abbildung 1. Will man dieses im Kopf anwenden, muss man sich lediglich die abgebildete Tabelle und die abgebildete Formel einprägen. Vereinfacht reicht es, wenn man sich die 12 Monatskennzahlen und die Jahreskennzahl von 1900 merkt. Allerdings ergeben sich durch die Differenz zu 1900 sehr große Zahlen, die das Kopfrechnen erschweren. Hernach ist es sinnvoll, wenn man sich mehrere Jahrenskennzahlen vor Augen hält. Anhand von 2 Beispielen soll die Anwendung der Tabelle und der Formel erläutert werden.
Jahreskennzahl |
Monatskennzahl |
||
Jahrj |
Kennzahl v |
Monat |
Kennzahl m |
1900 |
6 |
01 Januar |
0 |
1920 |
3 |
02 Februar |
3 |
1940 |
0 |
03 März |
3 |
1960 |
4 |
04 April |
6 |
1980 |
1 |
05 Mai |
1 |
2000 |
5 |
06 Juni |
4 |
2020 |
2 |
07 Juli |
6 |
2040 |
6 |
08 August |
2 |
2060 |
3 |
09 September |
5 |
2080 |
0 |
10 Oktober |
0 |
11 November |
3 |
||
12 Dezember |
5 |
||
Formel für das Datum "Tag.Monat.Jahr": (Jahr - j + Schaltjahre + v + m + Tag) mod 7 = Ergebnis Im Januar und Februar von Schaltjahren 1 vom Ergebnis abziehen! Ergebnis: 0=Montag, 1=Dienstag, 2=Mittwoch ... 6=Sonntag |
Beispiel 1: Gesucht ist der Wochentag des 29.2.1972:
Zunächst wird die Kennzahl des in der Tabelle nächst kleineren Jahres ermittelt. Dies ist das Jahr 1960
mit der Kennzahl 4. Zwischen 1972 und 1960 (Differenz = 12) liegen insgesamt 3
Schaltjahre (12 / 4 = 3). Für den Monat Februar gilt die Kennzahl 3. Da es sich um einen Februar
in einem Schaltjahr handelt muss vom Ergebnis 1 abgezogen werden:
(1972[Jahr] - 1960[j] + 3[Schaltjahre] + 4[v] + 3[m] + 29[Tag]) mod 7 = 2
2 - 1 = 1 [notwendig, da ein Februar im Schaltjahr]
1 = Dienstag
Beispiel 2: gesucht ist der wochentag des 15.12.2010:
Zunächst wird die Kennzahl des in der Tabelle nächst kleineren Jahres ermittelt. Dies ist das Jahr 2000
mit der Kennzahl 5. Zwischen 2010 und 2000 (Differenz = 10) liegen insgesamt 2
Schaltjahre (10 / 4 = 2). Für den Monat Dezember gilt die Kennzahl 5:
(2010[Jahr] - 2000[j] + 2[Schaltjahre] + 5[v] + 5[m] + 15[Tag]) mod 7 = 2
2 = Mittwoch
Die Herleitung des Rechenschemas
1. Schritt: Der 1.1. eines beliebigen Jahres
als ansatz für die erstellung des berechnungsschemas habe ich ein festes datum gewählt. von diesem datum aus
werden alle weiteren berechnungen abgeleitet. hierzu hat sich der 1.1.1900 angeboten, der zufälliger- und
glücklicherweise ein montag war. montag definiere ich hier als ersten tag der woche, womit er die kennzahl 0
erhält.
(0=montag; 1=dienstag; 2=mittwoch; 3=donnerstag; 4=freitag; 5=samstag; 6=sonntag)
da ein "normales" jahr 365 tage hat ergeben sich genau 52 wochen und 1 tag (365 durch 7
ist 52 rest 1). aufgrund dieses überfälligen tages verschiebt sich der wochentag des 1.1. folgender
jahre jeweils um einen tag. da man weiß, dass der 1.1.1900 ein montag war, muss der 1.1.1901 folglich ein
dienstag (montag(0) + 1 = dienstag(1)), der 1.1.1902 ein mittwoch, der 1.1.1903 ein donnerstag und der
1.1.1904 ein freitag gewesen sein.
diese reihe ließe sich beliebig fortsetzen, wenn es da nicht ein problem gäbe: schaltjahre!
da diese 366 tage umfassen (aufgrund des zusätzlichen 29.2.) ist ein schaltjahr 52
wochen und 2 überfällige tage lang. das bedeutet also, dass für folgejahre ein versatz von 2
verwendet werden muss. um die reihe von eben fortzusetzen: der 1.1.1905 war kein samstag, sondern - auf grund der
tatsache das 1904 ein schaltjahr war - ein sonntag (freitag(4) + 2 = sonntag(6)).
um nun den wochentag des 1.1. eines beliebigen jahres ermitteln zu können, muss man wissen wie viele "normalen" jahre (versatz um 1) und wie viele schaltjahre (versatz um 2) seit 1900 vergangen sind oder noch vergehen werden. somit weiß man wie oft der wochentag um 1 bzw. um 2 versetzt wurde. diese berechnung kann man folgendermaßen vornehmen:
berechnung |
beschreibung |
gesuchte jahreszahl - 1900 = j |
j...anzahl der vergangen jahre mit schaltjahr |
j / 4 = s |
s...anzahl der vergangen schaltjahre s ohne kommastellen! |
j + s = v |
v...versatz der wochentage seit 1900 |
als bespiel soll der 1.1.1977 dienen. laut der tabelle ergibt sich folgendes:
j = 1977 - 1900 = 77
s = 77 / 4 = 19
v = 77 + 19 = 96
seit 1900 sind also 96 tage versatz bis zum 1.1.1977 aufgelaufen. da der versatz v von einem montag
aus gezählt wurde (der 1.1.1900 war ein montag) definiert man den montag mit 0 und erhöht dann für
jeden nachfolgenden tag um 1:
wochentag |
versatz |
... (kann mit mod 7 vereinfacht werden) mod (modula) = rechenoperation, die den rest einer division ermittelt. |
montag |
0 |
7 14 21 28 35 42 49 56 63 70 77 84 91 ... |
dienstag |
1 |
8 15 22 29 36 43 50 57 64 71 78 85 92 |
mittwoch |
2 |
9 16 23 30 37 44 51 58 65 72 79 86 93 |
donnerstag |
3 |
10 17 24 31 38 45 52 59 66 73 80 87 94 |
freitag |
4 |
11 18 25 32 39 46 53 60 67 74 81 88 95 |
samstag |
5 |
12 19 26 33 40 47 54 61 68 75 82 89 96 |
sonntag |
6 |
13 20 27 34 41 48 55 62 69 76 83 90 97 |
wendet man nun den im beispiel ermittelten versatz von 96 auf die tabelle an, ergibt sich samstag (96 mod 7 = 5; 5 = samstag). der 1.1.1977 war also ein samstag.
zusammenfassung: mit diesem ersten teil des schemas kann man nun durch die differenz zu 1900 und der anzahl der darin enthaltenen schaltjahre den wochentag des jeweils 1.1. beliebiger jahre ermitteln.
2. Schritt: Der 1. eines beliebigen Monats
geht man nun vom eben bestimmten wochentag des 1.1. eines jahres aus, kann man weiterhin über den versatz
der einzelnen monate den wochentag des 1. eines monats bestimmen.
der januar z.b. hat 31 tage, was 4 wochen und 3 überfällige tage sind (31 durch 7 = 4
rest 3). somit ist der wochentag des 1. februar immer um 3 tage versetzt bezogen auf den 1. januar.
auf das obige beispiel zurückgegriffen (1.1.1977 = samstag) ergibt sich für den 1.2.1977 ein dienstag
(samstag(5) + 3 = dienstag(1); da 5 + 3 = 8, 8 mod 7 = 1, 1 = dienstag laut tabelle).
in folgender tabelle ist der versatz für jeden monat bezogen auf den 1.1. aufgelistet und mit mod 7 vereinfacht. um damit den 1. eines bestimmten monats aurechnen zu können, addiert man den versatz mit dem im ersten schritt für den 1.1. eines jahres berechneten.
monat |
versatz |
januar |
0 |
februar |
3 |
märz |
3 |
april |
6 |
mai |
1 |
juni |
4 |
juli |
6 |
august |
2 |
septemper |
5 |
oktober |
0 |
november |
3 |
dezember |
5 |
bei der verwendung dieser tabelle muss man eine ausnahme beachten: sie gilt nicht für die monate januar und februar,
wenn es sich um schaltjahre handelt. in diesem fall muss 1 als korrektur vom errechneten versatz abgezogen
werden. folgendes beispiel demonstriert dies:
1.2.1980
versatz für 1.1.1980 = 100 (siehe schritt 1)
versatz für februar = 3 (siehe tabelle)
summe = 100 + 3 = 103
korrektur, da 1980 ein schaltjahr: 103 - 1 = 102
102 mod 7 = 4
4 = freitag
zusammenfassung: bis zu dieser stelle ist es möglich, den wochentag des 1. eines beliebigen monats in einem beliebigen jahr zu ermitteln. was jetzt noch fehlt ist der x-te tag innerhalb eines monats.
3. Schritt: Der x-te Tag innerhalb eines Monats
der letzte schritt zur ermittlung des wochentages zu einem datum ist die einbeziehung des tages. es bietet sich hier an, die zahl des tages zu verwenden und zu den schon ermittelten versatz zu addieren. für den 15.11.1900 wäre dies z.b. 15 und für den 21.4.1933 wäre es 21 u.s.w. an dieser stelle muss man aber beachten, dass monate nicht mit dem tag 0 beginnen sondern direkt mit 1. dies wäre aber für die berechnung nach dem obigen schema notwendig. aus diesem grund muss man von der summe der ermittelten werte (jahresversatz + monatsversatz + tag) 1 abziehen. mit dem so ermittelten wert und einer anschließenden mod 7 operation erhält man die kennzahl des gesuchten wochentages (0=montag...6=sonntag).
4. Schritt: Ein Beispiel
an einem beispiel sollen nun alle 3 schritte nocheinmal praktisch hinterlegt werden. dazu verwende ich das datum
29.9.1919:
1. schritt (jahresversatz)
1919 - 1900 = 19 ( = anzahl jahre)
19 / 4 = 4 ( = anzahl schaltjahre)
19 + 4 = 23 ( = versatz unter berücksichtigung, dass schaltjahre einen versatz von 2 haben)
2. schritt (monatsversatz)
september(9) = 5 (= versatz für den monat september)
3. schritt (tag)
29 (= wert des tages)
29 - 1 = 28 (= korrektur, da monat nicht mit dem tag 0 beginnt)
ergebnis
23 + 5 + 28 = 56 (= summe der versätze aus schritt 1 bis 3)
56 mod 7 = 0 (= kennzahl für den wochentag)
0 = montag
der 29.9.1919 war also ein montag!
Informationen zu Schaltjahren
Zu Schaltjahren muss man Folgendes wissen:
- alle 4 jahre und dabei genau zu den durch 4 teilbaren jahren gibt es einen zusätzlichen tag im februar, den 29. februar. diese jahre werden "schaltjahre" genannt
1904, 1984, 1996 sind 3 beispiele für schaltjahre. - regelung I tritt alle 100 jahre und dabei genau zu den durch 100 teilbaren jahren (="säkularjahre") außer kraft.
1700, 1800, 1900 sind 3 beispiele für nicht-schaltjahre, die laut I welche sein müssten. - regelung II tritt alle 400 jahre und dabei genau zu den durch 400 teilbaren jahren außer kraft.
2000, 2400, 2800 sind 3 beispiele für schaltjahre, welche laut II keine sind.
aus diesem grund gab papst gregor XIII. am 24. Februar 1582 die reformation des julianischen kalenders (in form der bulle "inter gravissimas") bekannt, welche u.a. die oben aufgeführten 3 regelungen beinhaltete und zum ausgleich der 10 tage die daten 5.10.1582 bis 14.10.1582 strich. ein jahr hat nun nach dem gregorianischen kalender durchschnittlich 365,2425 tage, was eine jährliche abweichung von nur 26sec darstellt.
fazit: in meinem berechnungsschema beachte ich aus gründen der einfachheit nur die erste regelung ("alle 4 jahre ein schaltjahr"). da das jahr 2000 ein schaltjahr ist, kann somit mein rechenschema für daten vom 1.1.1900 bis 31.12.2099 verwendet werden, da ohne unterbrechung alle 4 jahre ein schaltjahr ist.