Thread Den Wochentag eines beliebigen Datums ermitteln..: .. (14 answers)
Opened by steinwolf at 2003-11-06 13:21

Crian
 2003-11-06 14:25
#69822 #69822
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Wenn Du wissen willst, wie es geht:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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


Grrr wieso sind die Kästen nicht breit genug für 80 Zeichen??\n\n

<!--EDIT|Crian|1068121659-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite

View full thread Den Wochentag eines beliebigen Datums ermitteln..: ..