Aloha,
da ich wohl bisher noch nicht der einzige war der Feiertage errechnen wollte dachte ich mir poste ich für die Nachwelt die Lösung.
Man kann sich alle beweglichen Feiertage errechnen wenn man von dem Ostersonntag ausgeht. Dementsprechend ist nur das die relevanz. Um den Ostersonntag zu errechnen nutzen wir die Gaußsche Formel.
Erst legen wir eine neue Funktion an:
GetHolidays(pYear as Integer = -1) as Dictionary
mit pYear = -1 können wir ein ein Jahr übergeben für welches wir die Feiertage haben wollen.
In der Funktion selbst legen wir erst die Parameter fest:
Dim dictHolidays
dictHolidays = new Dictionary
Dim da as new date
Dim Jahr as Integer
if pyear <> -1 then
Jahr = pYear //given Year
else
Jahr = da.Year //current Year
end if
Dim a,b,c,d,e,f as Integer
Danach errechnen wir uns mit der gaußschen Formel den Ostersonntag:
[code] a = Jahr mod 19
b = Jahr / 100
c = (8 * b + 13) / 25 -2
d = b - (jahr / 400) - 2
e = (19 * (Jahr Mod 19) + ((15 -c +d) Mod 30)) Mod 30
if e = 28 then
if a > 10 then
e=27
end if
elseif e = 29 then
e = 28
end if
f = (d + 6 * e + 2 * (Jahr Mod 4) + 4 * (Jahr Mod 7) + 6) Mod 7[/code]
Nun haben wir alle Werte und schmeißen alles benötigte nun in ein DateObject. Im selben Zug fügen wir den Namen so wie Tag gleich in ein Dictionary ein.
Dim ostersonntag as new date
ostersonntag.Year = Jahr
ostersonntag.Month = 3
ostersonntag.Day = e+f+22+1
dictHolidays.Value(ostersonntag.SQLDate)="Ostersonntag"
Ab diesen Punkt können wir immer weiter referenzieren. Diverse Beispiele wären:
[code] Dim ostermontag as new date(ostersonntag)
ostermontag.Day = ostermontag.Day+1
dictHolidays.Value(ostermontag.SQLDate)=“Ostermontag”
Dim christihimmelfahrt as new date(ostersonntag)
christihimmelfahrt.Day = christihimmelfahrt.day + 39
dictHolidays.Value(christihimmelfahrt.SQLDate)=“Christi Himmelfahrt”
Dim pfingstsonntag as new date(ostersonntag)
pfingstsonntag.Day = pfingstsonntag.Day + 49
dictHolidays.Value(pfingstsonntag.SQLDate)=“Pfingstsonntag”[/code]
Das spiel kann man natürlich weiter treiben je nach dem was man benötigt.
Am ende geben wir noch das erstellte Dictionary zurück:
return dictHolidays
Und erfreuen uns
lg
Christian