# 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