Datum ermitteln für vorgegebenen Wochentag

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