(Gast)
n/a Beiträge
|
Wochentagsberechnung
1. Okt 2006, 18:42
Nochmal ein Versuch eines Algorithmuses, schnell frei "übersetzt" nach Delphi aus der Wikipedia.
Ist sicherlich noch verbesserungswürdig, Vorschläge können gern gemacht werden.
Delphi-Quellcode:
(*
Wochentagsberechnung
Frei nach Wikipedia ([url]http://de.wikipedia.org/wiki/Wochentagsberechnung[/url])
Gibt den Wochentag zu einem Datum zurück.
Diese Funktion gibt eine Ganzzahl 0 bis 6 zurück, 0 steht dabei fuer Sonntag,
1 fuer Montag und so weiter. Die Jahreszahl des Datums muss zwischen 800
und 3100 liegen!
Datum: 02.10.2006
Autor: Balu der Baer
*)
function GetDaybyDate(day, month, year : Word) : Integer;
var
step1, step2, step3, step4, step5 : Integer;
yearnumbers, centurynumbers, i : Integer;
begin
yearnumbers := year mod 100;
centurynumbers := year div 100;
if not ((centurynumbers >= 8) and (centurynumbers <= 31)) then
begin
raise Exception.CreateFmt(' function GetDaybyDate: parameter Year must be between 800 and 3100 but is %d', [Year]);
end else
begin
step1 := day mod 7;
case month of
1, 10: step2 := 0;
2, 3, 11: step2 := 3;
4, 7: step2 := 6;
5: step2 := 1;
6: step2 := 4;
8: step2 := 2;
9, 12: step2 := 5;
end;
step3 := (yearnumbers div 12) + (yearnumbers mod 12) + ((yearnumbers mod 12) div 4);
case centurynumbers of
11,15,19,23,27,31 : step4 := 0;
10,14,18,22,26,30 : step4 := 2;
9,13,17,21,25,29 : step4 := 4;
8,12,16,20,24,28 : step4 := 6;
end;
if (IsLeapYear(year) and (month = 1)) or (IsLeapYear(year) and (month = 2)) then step5 := 6 else step5 := 0;
i := (step1 + step2 + step3 + step4 + step5) mod 7;
result := i;
end;
end;
Möglicher Aufruf:
Delphi-Quellcode:
var
days : array [0..6] of String = ('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');
...
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(days[GetDaybyDate(StrToInt(edit1.Text), StrToInt(edit2.Text), StrToInt(edit3.Text))]);
end;
So, jetzt könnt ihr mich zerfleischen, obwohl ich hoffe das das so in Ordnung ist.
|