# 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
|