Hong-Phuc Bui
2026-07-06 f55bc8353b1a171a364be1eacc39011262a853ed
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
# Module zur Berechnung von Kalendar Datum
 
def wochentag(d:int, m:int, y:int) -> int:
    """
        bereche den Wochentag eines Datum
 
        Die Wochentage werden wie folgt codiert:
        So | Mo | Di | Mi | Do | Fr | Sa
        0  | 1  | 2  | 3  | 4  | 5  | 6
 
        @param d: Der Tag im Monat fängt mit 0 an
        @param m: Der Monat 1 = Januar, 2 = Februa, ... 12 = Dezember
        @param y: Die Jahresnummer in 4 Ziffer
 
        @return den Wochentag als eine ganze Zahl
    """
    y0 = y - (14 - m) // 12
    x = y0 + y0//4 - y0//100 + y0//400
    m0 = m + 12*( (14-m)//12 ) - 2
    return (d + x + (31*m0)//12) % 7
 
 
def berechne_ueberhang_tage(wochentag:int) -> int:
    """Nach Gepflogenheit in deutches Kalender-System fängt eine Woche mit Montag an.
 
    Mo -> Keinen Überhang; 
    Di -> 1 Überhang; 
    Mi -> 2 Überhange; 
    Do -> 3 Überhange; 
    Fr -> 4 Überhange; 
    Sa -> 5 Überhange; 
    So -> 6 Überhange
    """
    return (wochentag - 1) % 7
 
 
def ist_schaltjahr(y:int) -> bool:
    """Ein Jahr ist ein Schaltjahr, wenn es 
        * durch 4 teilbar ist,
        * und nicht durch 100 teilbar,
        * aber durch 400 teilbar ist.
    """
    return (y % 4 == 0) and ( (y%100 != 0) or (y%400 == 0) )
 
 
def letzter_tag(m: int, y:int) -> int:
    """Berechne den letztenn Tag eines Monat in einem Jahr
    """
    tage = [None, 31, 28, 31, 30, 
    31, 30, 31, 31, 
    30, 31, 30, 31]
    if m != 2: return tage[m]
    return 29 if ist_schaltjahr(y) else 28