[ 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

Beliebte Posts aus diesem Blog

[ TAG 38 ][29.05.2021] - Erfolgreich - Freelancer-Portale

[ TAG 747 ][07.04.2023] -Erfolgreich -BNKTRS -Google Code -Objekt und Methodenliste

[ TAG 52 ][12.06.2021] - Erfolgreich - IAP-20210601-20210609-2325