Kalenderberechnungen 'http://galupki.de Option Explicit ' allgemein Type DATUM tag As Integer monat As Integer jahr As Integer End Type ' fuer DiffOstern Global OsterSonntagj% Global OsterSonntagm% Global OsterSonntagt% ' Jahreszeiten und Sommerzeitbeginn/-ende Global Const Fruehling = 3 Global Const Sommer = 6 Global Const Herbst = 9 Global Const Winter = 12 Global Const MEZS = 3 Global Const MEZW = 9 ' liefert das Datum des n.ten Adventssonntags ' advnr% und jahr% sind vorzugeben, monat% und tag% werden zurueckgegeben ' Sub Advent (advnr%, jahr%, monat%, tag%) Dim wtag% Dim y# tag% = 24 monat% = 12 wtag% = weekd(jahr%, 12, 24) If wtag% <> 6 Then ' 4. Advent bestimmen tag% = tag% - wtag% - 1 End If Select Case advnr% Case 4 ' schon ermittelt Case 3 tag% = tag% - 7 Case 2 tag% = tag% - 14 Case 1 ' etwas umstaendlicher: kann im November liegen y# = DateSerial(jahr%, monat%, tag%) y# = y# - 21# monat% = Month(y#) tag% = Day(y#) Case Else monat% = 0 tag% = 0 End Select End Sub ' gibt Teil des Datums zurueck, und zwar die Teile ' welche im VB-Standard anders ausgegeben werden: ' "w" ... Wochentag (0..6) ab Montag ' "ww"... lfd.Woche (1-53) des Jahres/Vorjahres ' Function DatTeil (part As String, d As Variant) As Integer Dim da As DATUM da.tag = DatePart("d", d) da.monat = DatePart("m", d) da.jahr = DatePart("yyyy", d) Select Case part Case "w" DatTeil = weekd(da.jahr, da.monat, da.tag) Case "ww" Call Woche(d, da.tag, da.jahr) DatTeil = da.tag Case Else End Select End Function Sub DiffOstern (jahr%, diff%, DATUM As Variant) ' liefert einen Tag abhaengig vom Ostersonntag ' Wenn diff% = -1 (Ostersamstag) wird der Muttertag ' des Jahres geliefert !!!!!!!!!!!!!!!!!!!!!!!!!!!! Dim y1p1 As Integer Dim y1p2 As Integer Dim r1 As Integer Dim r2 As Integer Dim wd% If diff% = -1 Or OsterSonntagj% <> jahr% Then y1p1 = (jahr% \ 100) - (jahr% \ 400) + 4 y1p2 = y1p1 + 11 - (jahr% \ 300) r1 = ((jahr% Mod 19) * 19 + y1p2) Mod 30 r2 = (((jahr% Mod 4) * 2 + (4 * jahr%) + (6 * r1) + y1p1) Mod 7) + r1 + 22 If (r2 = 57) Or ((r1 = 28) And (r2 = 56) And ((11 * (y1p2 + 1) Mod 30) < 19)) Then r2 = r2 - 7 End If If Schaltjahr(jahr%) Then r2 = r2 + 14 Else r2 = r2 + 13 End If ' Muttertagsermittlung gewuenscht ? If diff% = -1 Then wd% = weekd(jahr%, 5, 1) If (nrDayInYear(jahr%, 5, 14 - wd%) = r2 + 95) Then diff% = 42 Else DATUM = CVDate(Str$(14 - wd%) + ".05." + Str$(jahr%)) ' und fertig! diff% bleibt auf -1... End If End If If diff% <> -1 Then r2 = r2 + 46 ' ermittelt wurde aschermittwoch +46 = Ostersonntag DATUM = CVDate("01.01." + Str$(jahr%)) DATUM = DateAdd("d", r2 - 1, DATUM) If OsterSonntagj% <> jahr% Then 'Ostersonntag merken OsterSonntagj% = DatePart("yyyy", DATUM) OsterSonntagm% = DatePart("m", DATUM) OsterSonntagt% = DatePart("d", DATUM) End If DATUM = DateAdd("d", diff%, DATUM) End If Else DATUM = CVDate(Str$(OsterSonntagt%) + "." + Str$(OsterSonntagm%) + "." + Str$(OsterSonntagj%)) DATUM = DateAdd("d", diff%, DATUM) End If End Sub Function FloatWoTag (jahr%, monat%, tag%, WoTag%) ' liefert das erste auftreten (Kalendertag) des wotag% nach/am ' tag%.monat%.jahr% (z.B. Buss- und Bettag = 1. Mittwoch nach 16.11.) ' oder 0, falls Monatsgrenze ueberschritten wird ! Dim eWoTag% Dim xTag% eWoTag% = weekd(jahr%, monat%, tag%) xTag% = (WoTag% - eWoTag%) If xTag% < 0 Then xTag% = xTag% + 7 End If xTag% = xTag% + tag% If xTag% > TageImMonat(monat%, jahr%) Then xTag% = 0 End If FloatWoTag = xTag% End Function ' liefert monat% und tag% des Beginns der angeforderten Jahreszeit ' typ% ... Const Fruehling,Sommer,Herbst,Winter ! ' wenn tag% Null wird ist typ% falsch... ' Sub Jahreszeit (jahr%, typ%, monat%, tag%) monat% = typ% Select Case typ% Case Fruehling If Schaltjahr(jahr%) Then tag% = 20 Else tag% = 21 End If Case Sommer tag% = 21 Case Herbst If Schaltjahr(jahr%) Then tag% = 22 Else tag% = 23 End If Case Winter If Schaltjahr(jahr%) Then tag% = 21 Else tag% = 22 End If Case Else tag% = 0 End Select End Sub Function nrDayInYear (jahr%, monat%, tag%) ' liefert die Nr. des lfd. Tages im Jahr Dim anz% Dim z% anz% = 0 For z% = 1 To monat% If z% < monat% Then anz% = anz% + TageImMonat(z%, jahr%) Else anz% = anz% + tag% End If Next nrDayInYear = anz% End Function Function NrWocheWoTag (jahr%, monat%, tag%) ' liefert die lfd. Nr. der Woche des Monats bezogen auf den ' Wochentag des tag%.monat%.jahr% (1 2 3 4 5) ' falls Rueckgabewert negativ ist das gleichzeitig das ' letzte auftreten des Wochentages im Monat Dim xTag% Dim xAnz% xAnz% = 0 xTag% = tag% While xTag% > 0 xAnz% = xAnz% + 1 xTag% = xTag% - 7 Wend If (tag% + 7) > TageImMonat(monat%, jahr%) Then xAnz% = xAnz% * (-1) End If NrWocheWoTag = xAnz% End Function ' ermittelt den ersten per. Termin des Monats (oder den naechst folgenden) ' startd liefert das "Startdatum" der Perioden, pert% die Periodenlaenge ' jahr% und monat% geben den gewuenschten Zielmonat an ' in tag% und zield wird der erste period. Termin des Monats zurueckgegeben ' ist tag% = 0, enthaelt zield den naechsten per. Termin, der allerdings ' ausserhalb (nach) dem gewuenschten Monat liegt ! ' VORSICHT!: keine Pruefung, ob jahr%/monat% vor startd liegt! ' Sub PerTagInMonat (startd As Variant, pert%, jahr%, monat%, tag%, zield As Variant) Dim sd# Dim zd# Dim aufsatz& sd# = DateSerial(DatePart("yyyy", startd), DatePart("m", startd), DatePart("d", startd)) zd# = DateSerial(jahr%, monat%, 1) aufsatz& = (CLng(zd# - sd#) Mod CLng(pert%)) + 1& ' Lfdtag (1-p) innerhalb Periode If aufsatz& > 1& Then tag% = (pert% - CInt(aufsatz&)) + 1 Else tag% = 1 End If zd# = zd# + tag% If tag% > TageImMonat(monat%, jahr%) Then tag% = 0 End If zield = CVDate(Str$(Day(zd#)) + "." + Str$(Month(zd#)) + "." + Str$(Year(zd#))) End Sub Function Schaltjahr (jahr) 'liefert TRUE wenn Schaltjahr oder 'FALSE wenn "gemeines" Jahr Schaltjahr = ((jahr Mod 4) = 0) And (((jahr Mod 400) = 0) Or ((jahr Mod 100) <> 0)) End Function ' liefert fuehr jahr% und typ% ' den monat% und tag%, an dem auf Sommer- bzw. Winterzeit umgestellt wird! ' (jeweils letzter Sonntag im Maerz/September seit 1980) ' typ% = Global Const MEZS oder MEZW ' wenn tag% = 0 keine Sommerzeit im Kalenderjahr... ' Sub Sommerzeit (jahr%, typ%, monat%, tag%) If jahr% >= 1980 Then monat% = typ% Select Case typ% Case MEZS tag% = FloatWoTag(jahr%, monat%, 25, 6) ' erster Sonntag am/nach 25.3. Case MEZW If jahr% < 1997 Then tag% = FloatWoTag(jahr%, monat%, 24, 9) ' erster Sonntag am/nach 24.9. Else tag% = FloatWoTag(jahr%, monat%, 24, 10) ' erster Sonntag am/nach 24.10. End If Case Else monat% = 0 tag% = 0 End Select Else monat% = 0 tag% = 0 End If End Sub Function TageImJahr (jahr) 'Anzahl der Tage in einem Jahr If Schaltjahr(jahr) Then TageImJahr = 366 Else TageImJahr = 365 End If End Function Function TageImMonat (monat, jahr) 'liefert die Anzahl der Tage im Monat zurueck 'jahr wird nur fuer februar benoetigt... Select Case monat Case 1, 3, 5, 7, 8, 10, 12 TageImMonat = 31 Case 4, 6, 9, 11 TageImMonat = 30 Case 2 ' TageImMonat = 28 + Abs(Schaltjahr(jahr) If Schaltjahr(jahr) Then TageImMonat = 29 Else TageImMonat = 28 End If Case Else TageImMonat = 0 End Select End Function ' Text Monat Function TxtMonat (mo%) As String Select Case mo% Case 1 TxtMonat = "Januar" Case 2 TxtMonat = "Februar" Case 3 TxtMonat = "März" Case 4 TxtMonat = "April" Case 5 TxtMonat = "Mai" Case 6 TxtMonat = "Juni" Case 7 TxtMonat = "Juli" Case 8 TxtMonat = "August" Case 9 TxtMonat = "September" Case 10 TxtMonat = "Oktober" Case 11 TxtMonat = "November" Case 12 TxtMonat = "Dezember" Case Else TxtMonat = "" End Select End Function ' Text Wochentag Function TxtWotag (wt%) As String Select Case wt% Case 0 TxtWotag = "Montag" Case 1 TxtWotag = "Dienstag" Case 2 TxtWotag = "Mittwoch" Case 3 TxtWotag = "Donnerstag" Case 4 TxtWotag = "Freitag" Case 5 TxtWotag = "Samstag" Case 6 TxtWotag = "Sonntag" Case Else TxtWotag = "" End Select End Function Function weekd (j%, m%, t%) 'Wochentagsnummer des Datums Dim d As Variant d = CVDate(Str$(t%) + "." + Str$(m%) + "." + Str$(j%)) weekd = (DatePart("w", d) + 5) Mod 7 End Function Sub Woche (DATUM As Variant, wochnr%, jahr%) ' liefert die lfd. Nr. der Woche im Jahr ' eine woche "gehoert" zu dem jahr, in das mindestens ' 4 der 7 wochentage fallen! daher kann sich ggfs. jahr% ' entsprechend aendern... Dim wota% jahr% = DatePart("yyyy", DATUM) wota% = weekd(jahr%, 1, 1) wochnr% = DatePart("y", DATUM) wochnr% = (wochnr% + wota% - 1) \ 7 If wota% <= 3 Then 'Donnerstag wochnr% = wochnr% + 1 End If If wochnr% = 0 Then jahr% = jahr% - 1 wota% = weekd(jahr%, 1, 1) If wota% > 3 Then 'Donnerstag wochnr% = 52 Else wochnr% = 53 End If ElseIf wochnr% = 53 And weekd(jahr% + 1, 1, 1) <= 3 Then wochnr% = 1 jahr% = jahr% + 1 End If End Sub Function WoTag (DATUM As Variant) 'WoTag() liefert die Wochentagsnr. aus einem Datum 'im Gegensatz zum Standard So=1, Mo=2...: 'Mo=0, Di=1, Mi=2, Do=3, Fr=4, Sa=5, So=6 WoTag = (DatePart("w", DATUM) + 5) Mod 7 End Function Function XterWoTagInMonat (jahr%, monat%, WoTag%, Nr%) ' liefert den Kalendertag des Monats (den nr%-ten wotag% des monat%) ' oder 0, falls dieser Tag nicht existiert (5.ter Sonntag...) Dim eWoTag% Dim xTag% eWoTag% = weekd(jahr%, monat%, 1) ' Wochentag Monatserster xTag% = WoTag% - eWoTag% ' Diff. MonErster/Gesuchter If xTag% < 0 Then eWoTag% = xTag% + 8 ' naechste Woche Else eWoTag% = xTag% + 1 ' dieselbe Woche End If xTag% = eWoTag% + ((7 * Nr%) - 7) ' Zieltag in der nr% Woche If xTag% > TageImMonat(monat%, jahr%) Then If Nr% > 5 Then While xTag% > TageImMonat(monat%, jahr%) xTag% = xTag% - 7 Wend Else xTag% = 0 End If End If XterWoTagInMonat = xTag% End Function Mondphasenberechnung Option Explicit Dim TT(0 To 5) As Single ' Tausender Dim HT(0 To 9) As Single ' Hunderter Dim ZT(0 To 9) As Single ' Zehner Dim ET(0 To 9) As Single ' Einer eines Jahres Dim MTN(1 To 12) As Single ' Monate Neumond Dim MTV(1 To 12) As Single ' Monate Vollmond Dim RT(0 To 3) As Single ' Restwerte jahr MOD 4 Dim SW(1 To 4) As Single ' Subtrahenden Wert > 29.5 ' Vergleicht zwei Datuemer ' -1: a < b ' 0: a = b ' 1: a > b Function CompareDATUM (a As DATUM, b As DATUM) Dim x# Dim y# x# = DateSerial(a.jahr, a.monat, a.tag) y# = DateSerial(b.jahr, b.monat, b.tag) If x# < y# Then CompareDATUM = -1 ElseIf x# > y# Then CompareDATUM = 1 Else CompareDATUM = 0 End If End Function ' Differenztage vom Julianischen zum Gregorianischen Kalender Function DiffJulGreg (d As DATUM) Dim jd As DATUM jd.tag = 1 jd.monat = 3 jd.jahr = 2100 If CompareDATUM(d, jd) >= 0 Then DiffJulGreg = 14 Else jd.jahr = 1900 If CompareDATUM(d, jd) >= 0 Then DiffJulGreg = 13 Else jd.jahr = 1800 If CompareDATUM(d, jd) >= 0 Then DiffJulGreg = 12 Else jd.jahr = 1700 If CompareDATUM(d, jd) >= 0 Then DiffJulGreg = 11 Else jd.tag = 5 jd.monat = 10 jd.jahr = 1582 If CompareDATUM(d, jd) >= 0 Then DiffJulGreg = 10 Else DiffJulGreg = 0 End If End If End If End If End If End Function ' initialisieren der Tabellen zur Bestimmung der Mondphasen ' von 0 bis 6000 u.Z. mit Unsicherheit von 0,5 Tagen ' Quelle: Anhang II aus S.I.Seleschnikow: ' "Wieviel Monde hat ein Jahr" Sub InitTab () TT(0) = 0# TT(1) = 13.9 TT(2) = 27.7 TT(3) = 12.1 TT(4) = 25.9 TT(5) = 10.3 HT(0) = 0# HT(1) = 4.3 HT(2) = 8.7 HT(3) = 13# HT(4) = 17.4 HT(5) = 21.7 HT(6) = 26# HT(7) = .8 HT(8) = 5.2 HT(9) = 9.5 ZT(0) = 0# ZT(1) = 9.3 ZT(2) = 18.6 ZT(3) = 27.9 ZT(4) = 7.6 ZT(5) = 16.9 ZT(6) = 26.2 ZT(7) = 6# ZT(8) = 15.3 ZT(9) = 24.6 ET(0) = 0# ET(1) = 18.6 ET(2) = 7.8 ET(3) = 26.4 ET(4) = 15.5 ET(5) = 4.6 ET(6) = 23.3 ET(7) = 12.4 ET(8) = 1.5 ET(9) = 20.2 MTN(1) = 13.4 MTN(2) = 11.9 MTN(3) = 24.2 MTN(4) = 22.6 MTN(5) = 22# MTN(6) = 20.6 MTN(7) = 20# MTN(8) = 18.4 MTN(9) = 17# MTN(10) = 16.6 MTN(11) = 15.1 MTN(12) = 14.8 MTV(1) = 28.2 MTV(2) = 26.7 MTV(3) = 9.5 MTV(4) = 7.9 MTV(5) = 7.3 MTV(6) = 5.8 MTV(7) = 5.3 MTV(8) = 3.6 MTV(9) = 2.2 MTV(10) = 1.9 MTV(11) = .3 MTV(12) = 0# RT(0) = 0# RT(1) = .2 RT(2) = .5 RT(3) = .8 SW(1) = 118.1 SW(2) = 88.6 SW(3) = 59.1 SW(4) = 29.5 End Sub ' interne Prozedur Sub Mondphasen (jahr%, monat%, neumond%, vollmond%) Dim td As DATUM Dim p1 As DATUM Dim p2 As DATUM Dim summe As Single ReDim s(1 To 2) As Single Dim i, j, t, h, z, e, r As Integer p1.tag = 1 p1.monat = 3 p1.jahr = 0 p2.tag = 31 p2.monat = 12 p2.jahr = 2199 td.jahr = jahr% td.monat = monat% td.tag = 1 If CompareDATUM(td, p1) >= 0 And CompareDATUM(td, p2) <= 0 Then If monat% <= 2 Then td.jahr = td.jahr - 1 End If t = td.jahr \ 1000 h = (td.jahr - t * 1000) \ 100 z = (td.jahr - t * 1000 - h * 100) \ 10 e = td.jahr - t * 1000 - h * 100 - z * 10 r = td.jahr Mod 4 summe = TT(t) + HT(h) + ZT(z) + ET(e) + RT(r) summe = summe + CSng(DiffJulGreg(td)) s(1) = summe + MTN(monat%) s(2) = summe + MTV(monat%) For i = 1 To 2 For j = 1 To 4 If s(i) > SW(j) Then s(i) = s(i) - SW(j) End If Next Next neumond% = Int(s(1)) ' nachkomma weg vollmond% = Int(s(2)) If neumond% = 0 Then neumond% = 1 ElseIf neumond% > 29 Then neumond% = neumond% - 29 End If If vollmond% = 0 Then vollmond% = 1 ElseIf vollmond% > 29 Then vollmond% = vollmond% - 29 End If Else End If End Sub REM Verwendeter Algorithmus zur Errechnung des Osterdatums (BASIC-Darstellung): REM Wobei REM J = Jahreszahl(vierstellig) REM OM= Monat des Ostersonntags REM OT=Tag des Ostersonntags innhalb des Monats. REM REM Der Algorithmus geht auf den Mathematiker und Astronomen Carl Friedrich Gauß (1777-1855) zurück. Er gilt in der hier angegebenen Form von REM 1900 bis 2099! CLS INPUT "Jahr (vierstellig), von dem Ostern berechnet werden soll ? ", J a = J MOD 19 b = J MOD 4 c = J MOD 7 d = (19 * a + 24) MOD 30 e = (2 * b + 4 * c + 6 * d + 5) MOD 7 ot = 22 + d + e om = 3 IF ot > 31 THEN ot = d + e - 9 om = 4 END IF IF ot = 26 AND om = 4 THEN ot = 19 END IF IF ot = 25 AND om = 4 AND d = 28 AND e = 6 AND a > 10 THEN ot = 18 END IF PRINT "Ostern fällt "; J; " auf den "; ot; "."; om; "." Julianische Tageszahl in Modula-2 PROCEDURE JultagInDatum(jultag : LONGCARD; VAR datum : DATUM); VAR l,n,j,tag,monat,jahr : LONGINT; BEGIN j:= jultag; l:= j + 68569L; n:= 4L * l DIV 146097L; l:= l - ( n * 146097L + 3L ) DIV 4L; jahr:= 4000L * ( l + 1L ) DIV 1461001L; l:= l - 1461L * jahr DIV 4L + 31L; monat:= 80L * l DIV 2447L; tag := l - 2447L * monat DIV 80L; l:= monat DIV 11L; monat:= monat + 2L - 12L * l; jahr:= 100L * ( n - 49L ) + l + jahr; datum.tag:= SHORT(tag); datum.monat:= SHORT(monat); datum.jahr:= SHORT(jahr); datum.wotag:= SHORT(jultag MOD 7L); (* 0=Mo... *) END JultagInDatum; PROCEDURE DatumInJultag(datum : DATUM; VAR jultag : LONGCARD); VAR l,j,tag,monat,jahr : LONGINT; BEGIN tag:= LONG(datum.tag); monat:= LONG(datum.monat); jahr:= LONG(datum.jahr); j:= ( monat - 14L ) DIV 12L; l:= jahr + j + 4800L; j:= tag - 32075L + 1461L * l DIV 4L + 367L * ( monat - 2L - 12L * j ) DIV 12L - 3L * ( ( l + 100L ) DIV 100L ) DIV 4L; jultag:= j; END DatumInJultag; MOD = Modulo DIV = Division ohne Rest Feiertage begda; endda; typ; i1; i2; text 28.11.1582; 31.12.2199 ; Advent; 1; ; 1. Advent 05.12.1582; 31.12.2199 ; Advent; 2; ; 2. Advent 12.12.1582; 31.12.2199 ; Advent; 3; ; 3. Advent 19.12.1582; 31.12.2199 ; Advent; 4; ; 4. Advent 17.11.1582; 31.12.1994 ; floatWD; Mi; 16; Buß- und Bettag 22.11.1995; 31.12.2199 ; floatWD; Mi; 16; Buß- und Bettag 21.11.1582; 31.12.2199 ; floatWD; So; 20; Totensonntag 14.11.1582; 31.12.2199 ; floatWD; So; 13; Volkstrauertag 09.05.1582; 31.12.2199 ; MuTag; -1; ; Muttertag 16.04.1582; 31.12.2199 ; Ostern +/-; -2; ; Karfreitag 15.04.1582; 31.12.2199 ; Ostern +/-; -3; ; Gründonnerstag 03.03.1582; 31.12.2199 ; Ostern +/-; -46; ; Aschermittwoch 02.03.1582; 31.12.2199 ; Ostern +/-; -47; ; Fastnacht 01.03.1582; 31.12.2199 ; Ostern +/-; -48; ; Rosenmontag 25.02.1582; 31.12.2199 ; Ostern +/-; -52; ; Weiberfastnacht 11.04.1582; 31.12.2199 ; Ostern +/-; -7; ; Palmsonntag 18.04.1582; 31.12.2199 ; Ostern +/-; 0; ; Ostern 19.04.1582; 31.12.2199 ; Ostern +/-; 1; ; Ostermontag 27.05.1582; 31.12.2199 ; Ostern +/-; 39; ; Himmelfahrt 06.06.1582; 31.12.2199 ; Ostern +/-; 49; ; Pfingsten 07.06.1582; 31.12.2199 ; Ostern +/-; 50; ; Pfingstmontag 17.06.1582; 31.12.2199 ; Ostern +/-; 60; ; Fronleichnam 25.04.1582; 31.12.2199 ; Ostern +/-; 7; ; Weißer Sonntag 01.11.1582; 31.12.2199 ; T.M.; 1; ; Allerheiligen 01.05.1582; 31.12.2199 ; T.M.; 1; ; Maifeiertag 01.01.1582; 31.12.2199 ; T.M.; 1; ; Neujahr 11.11.1582; 31.12.2199 ; T.M.; 11; ; Martinstag 13.05.1582; 31.12.2199 ; T.M.; 13; ; Servatius - letzter Eisheilige 14.02.1582; 31.12.2199 ; T.M.; 14; ; Valentinstag 15.08.1582; 31.12.2199 ; T.M.; 15; ; Mariä Himmelfahrt 17.06.1949; 17.06.1990 ; T.M.; 17; ; Dt. Einheit (frei) 17.06.1991; 31.12.2199 ; T.M.; 17; ; Dt. Einheit 02.11.1582; 31.12.2199 ; T.M.; 2; ; Allerseelen 24.12.1582; 31.12.2199 ; T.M.; 24; ; Heiliger Abend 25.12.1582; 31.12.2199 ; T.M.; 25; ; Weihnachten 26.12.1582; 31.12.2199 ; T.M.; 26; ; Weihnachten 27.06.1582; 31.12.2199 ; T.M.; 27; ; Siebenschläfer 03.10.1990; 31.12.2199 ; T.M.; 3; ; Dt. Einheit 31.10.1582; 31.12.2199 ; T.M.; 31; ; Reformationstag 31.12.1582; 31.12.2199 ; T.M.; 31; ; Silvester 05.05.1582; 31.12.2199 ; T.M.; 5; ; Europatag 06.01.1582; 31.12.2199 ; T.M.; 6; ; Heilige 3 Könige 06.12.1582; 31.12.2199 ; T.M.; 6; ; Nikolaus 08.08.1582; 31.12.2199 ; T.M.; 8; ; Friedensfest (Augsburg) 31.07.1950; 31.12.2199 ; WeekMonth; Mo; last; Sommerschlußverkauf 30.01.1950; 31.12.2199 ; WeekMonth; Mo; last; Winterschlußverkauf 30.03.1980; 31.12.2199 ; WeekMonth; So; last; Beginn der Sommerzeit 28.09.1980; 24.09.1995 ; WeekMonth; So; last; Ende der Sommerzeit 27.10.1996; 31.12.2199 ; WeekMonth; So; last; Ende der Sommerzeit 03.10.1582; 31.12.2199 ; WeekMonth; So; 1; Erntedankfest