diff --git a/code/corelation.py b/code/corelation.py index c5ea7dc..9ab54d2 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -112,11 +112,20 @@ month_translation = { } -# Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4' oder 'Dez 29, 2023-Jan 4, 2024' in die Kalenderwoche und das Startdatum zu konvertieren +# Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4', 'Dez 29, 2023-Jan 4, 2024' oder 'Dez 22-28 2023' in Kalenderwoche und Startdatum zu konvertieren def convert_to_week_number_and_start_date(date_range_str): # Entferne zusätzliche Leerzeichen um den Bindestrich herum und entferne Kommas date_range_str = date_range_str.replace(" - ", "-").replace(",", "") + # Prüfen, ob das Jahr am Ende steht (z.B. 'Dez 22-28 2023') + if date_range_str[-4:].isdigit(): + # Jahr am Ende des Datums + year_str = date_range_str[-4:] + date_range_str = date_range_str[:-5] # Entferne das Jahr aus der Datumsangabe + else: + # Kein Jahr am Ende -> nutze das aktuelle Jahr + year_str = str(datetime.now().year) + # Splitte den Datumsbereich in Start- und Endteil start_part, end_part = date_range_str.split("-") @@ -128,20 +137,14 @@ def convert_to_week_number_and_start_date(date_range_str): # Verarbeite den Endteil end_parts = end_part.split(" ") - # Verarbeite das Enddatum, basierend darauf, ob ein Jahr enthalten ist oder nicht - if len(end_parts) == 3: # Fall: 'Jan 4 2024' + # Verarbeite das Enddatum, basierend darauf, ob der Endteil das Jahr enthält + if len(end_parts) == 2: # Fall: 'Apr 4' end_month_str = end_parts[0] end_day = int(end_parts[1].strip()) - end_year = int(end_parts[2].strip()) # Nimm das Jahr aus dem Endteil - elif len(end_parts) == 2: # Fall: 'Jan 4' ohne Jahr - end_month_str = end_parts[0] - end_day = int(end_parts[1].strip()) - end_year = datetime.now().year # Nutze das aktuelle Jahr, wenn kein Jahr angegeben ist else: - # Falls kein Monat angegeben, setze den Startmonat für den Endteil + # Fall: kein Monat -> nur Tag (z.B. '28' im Format 'Dez 22-28 2023') end_month_str = start_month_str end_day = int(end_parts[0].strip()) - end_year = datetime.now().year # Nutze das aktuelle Jahr # Konvertiere den deutschen Monatsnamen in den englischen für beide Monate if start_month_str in month_translation: @@ -149,27 +152,17 @@ def convert_to_week_number_and_start_date(date_range_str): if end_month_str in month_translation: end_month_str = month_translation[end_month_str] - # Wenn der Startteil ein Jahr enthält, nutze dieses - if len(start_parts) == 3: - start_year = int(start_parts[2]) - else: - start_year = datetime.now().year - - # Falls der Datumsbereich über den Dezember hinausgeht, endet das Enddatum im nächsten Jahr - if start_month_str == 'Dec' and end_month_str == 'Jan': - end_year = start_year + 1 - try: # Konvertiere das Startdatum in ein Datum - start_date = datetime.strptime(f"{start_month_str} {start_day} {start_year}", "%b %d %Y") + start_date = datetime.strptime(f"{start_month_str} {start_day} {year_str}", "%b %d %Y") except ValueError: - raise ValueError(f"Ungültiges Startdatum: {start_month_str} {start_day} {start_year}") + raise ValueError(f"Ungültiges Startdatum: {start_month_str} {start_day} {year_str}") try: # Konvertiere das Enddatum in ein Datum - end_date = datetime.strptime(f"{end_month_str} {end_day} {end_year}", "%b %d %Y") + end_date = datetime.strptime(f"{end_month_str} {end_day} {year_str}", "%b %d %Y") except ValueError: - raise ValueError(f"Ungültiges Enddatum: {end_month_str} {end_day} {end_year}") + raise ValueError(f"Ungültiges Enddatum: {end_month_str} {end_day} {year_str}") # Berechne die Kalenderwoche basierend auf dem Startdatum week_number = start_date.isocalendar()[1]