sub tag_der_woche ($$$) { # ----------------------------------------------------------------------------- # sub : t a g _ d e r _ w o c h e # ----------------------------------------------------------------------------- # Autor : CD # Aufgabe : Berechnet den Wochentag zu einem Datum. # # Vgl. http://www.informatik.uni-ulm.de/pm/mitarbeiter/mark/day_of_week.html # # Parameter : Tag (1-31), Monat (1-12) und Jahr (4-Stellig) # Rückgabewert : 0 (Sonntag) bis 6 (Samstag) # ----------------------------------------------------------------------------- # 0.0.1 - 17.01.2003 - CD - Erstellt # 0.0.2 - 20.01.2003 - CD - Funktion ist_schaltjahr verwendet # ----------------------------------------------------------------------------- my $t = shift; my $m = shift; my $j = shift; print "tag_der_woche: t='$t', m='$m', j='$j'\n" if $Debug > 2; # Abbruch der Funktion bei falshen Argumentübergaben: return -1 unless defined($t) and defined($m) and defined($j); return -2 unless 1 <= $t and $t <= 31; return -3 unless 1 <= $m and $m <= 12; return -4 unless 1592 <= $j and $j <= 2299; my %jahrhundert = (15 => 0, 16 => 6, 17 => 4, 18 => 2, 19 => 0, 20 => 6, 21 => 4, 22 => 2, ); my $jj = $j % 100; # letzte beiden Ziffern des Jahres my $jh = int($j / 100); # Jahhundert (erste beide Ziffern des Jahres my $schalt = ist_schaltjahr($j); print "jh='$jh', jj='$jj', schalt='$schalt'\n" if $Debug > 2; my $jhdtcode = $jahrhundert{$jh}; print "jhdtcode='$jhdtcode'\n" if $Debug > 2; my $jahrcode = $jj + int($jj / 4); print "jahrcode='$jahrcode'\n" if $Debug > 2; my @monat = (1-$schalt, 4-$schalt, 4, 0, 2, 5, 0, 3, 6, 1, 4, 6); my $monatcode = $monat[$m-1]; print "monatcode='$monatcode'\n" if $Debug > 2; my $tagcode = $jhdtcode + $jahrcode + $monatcode + $t; --$tagcode; # damit Sonntag auf die 0 fällt... $tagcode %= 7; print "tagcode='$tagcode'\n" if $Debug > 2; return $tagcode; } # sub tag_der_woche sub ist_schaltjahr ($) { # ----------------------------------------------------------------------------- # sub : i s t _ s c h a l t j a h r # ----------------------------------------------------------------------------- # Autor : CD # Aufgabe : Gibt an, ob das übergebene Jahr ein Schaltjahr ist. # Parameter : Jahr # Rückgabewert : 0 oder 1 # ----------------------------------------------------------------------------- # 0.0.1 - 20.01.2003 - CD - Erstellt # ----------------------------------------------------------------------------- my $j = shift; return 1 if $j%4==0 and ($j%100!=0 or $j%400==0); return 0; } # sub ist_schaltjahr