Mit dem Programmierbeispiel kann das Datum für einen vorgegebenen Wochentag ermittelt werden.
import calendar
from datetime import date
from enum import IntEnum
class Weekday(IntEnum):
MONDAY = 0
TUESDAY = 1
WEDNESDAY = 2
THURSDAY = 3
FRIDAY = 4
SATURDAY = 5
SUNDAY = 6
def date_for_weekday(year: int, month: int, nth: int = -1, weekday: int = 6) -> str:
"""
Ermittelt das Datum für eine gegebene Kombination aus Jahr, Monat und Wochentag.
:param year: Jahr für das das Datum bestimmt werden soll
:param month: der Monat für den das Datum bestimmt waren soll
:param nth: Zähler für die Woche im Monat, z.B. 1 = erste, 4 = vierte, -1 = letzte, -2 = vorletzte
:param weekday: Wochentag für den das Datum bestimmt werden soll, als Enum von Weekday, z.B. Weekday.MONDAY
:return: date (as a string) for the given data with format dd.mm.yyyy
"""
if date(year, month, 1).weekday() == weekday and nth > 0: nth = nth - 1
try: result = calendar.Calendar(weekday).monthdatescalendar( year, month )[nth][0] except IndexError: print(f"Index out of range! The 'nth' value is wrong. The month has no week '{nth}'.") return ""
return result.strftime("%d.%m.%Y")
# Beispiele
# default: letzter Sonntag im Monat (hier Dezember 2022) print(date_for_weekday(2022, 12)) # letzter Dienstag im Dezember 2022 print(date_for_weekday(2022, 12, nth=-1, weekday=Weekday.TUESDAY)) # dritter Donnerstag im Dezember 2022
print(date_for_weekday(2022, 12, nth=3, weekday=Weekday.THURSDAY))
Ausgabe:
25.12.2022 27.12.2022 15.12.2022