[ TAG 423 ][18.05.2022] -Erfolgreich -IAP-20220403-20220403-1150
Ich beginne diesen Beitrag mit einen interessanten Codeschnipsel. Einer der Aufgaben von heute bestand darin, die Methoden KWB und KWE zu entwerfen. Bei diesen Methoden geht es einfach darum eine Zeichenkette zurück zu geben, die ein Datum repräsentiert. Wann beginnt die KW und wann endet die KW.
- KWB - KalenderWochenBeginn
- KWE - KalenderWochenEnde
Die erste Überlegung, die mir in den Sinn kam war ganz einfach. Man zählt die Tage und fragt jedes mal nach der KW des gezählten Datum. Für den Beginn zählt man runter und für das Ende zählt man hoch. Als Returnwert habe ich einen Dumystring ausgegeben.
def KWB():
kwb = date.today()
kw = kwb.isocalendar()[1]
dt = date.today()
bol = True
while bol:
dt = dt - datetime.timedelta(days=1)
if kw == dt.isocalendar()[1]:
kwb = dt
else:
bol = False
print(f"kwb: {kwb}")
return "20220516"
def KWE():
kwb = date.today()
kw = kwb.isocalendar()[1]
dt = date.today()
bol = True
while bol:
dt = dt + datetime.timedelta(days=1)
if kw == dt.isocalendar()[1]:
kwb = dt
else:
bol = False
print(f"kwe: {kwb}")
return "20220522"
Dieses Verfahren ist nicht sehr effizient. Es funktioniert joch wollte ich das Problem anders lösen.
Viel einfacher und mit deutlich weniger Zeilen wäre die Lösung des Problems über die Wochentagesnummer. Mit dieser Nummer wissen wir bereits wie viel wir zum Wochenanfang und Wochenende abzählen müssen.
- [date.weekday()] beginnt mit [0] für [Montag] und endet mit [6] für Sonntag.
- [https://docs.python.org/3/library/datetime.html#datetime.date.weekday]
So sieht es jetzt aus.
def KWB():
kwb = date.today()
wd = kwb.weekday()
dt = kwb - datetime.timedelta(days=wd)
print(f"KWB: {dt}")
return "20220516"
def KWE():
kwb = date.today()
wd = kwb.weekday()
dt = kwb + datetime.timedelta(days=(6-wd))
print(f"KWE: {dt}")
return "20220516"
Jetzt müssen die Dumy-Rückgabewerte noch gemacht werden und wir haben zwei sehr schöne Methoden programmiert.
def KWB():
kwb = date.today()
wd = date.today().weekday()
dt = kwb - datetime.timedelta(days=wd)
return f"{dt.year}{dt.month:02d}{dt.day:02d}"
def KWE():
kwb = date.today()
wd = date.today().weekday()
dt = kwb + datetime.timedelta(days=(6-wd))
return f"{dt.year}{dt.month:02d}{dt.day:02d}"
Kommentare
Kommentar veröffentlichen