datumsberechnungen
1from datetime import datetime, timedelta 2import locale 3from typing import Optional 4 5 6class Datumsberechnungen: 7 """ 8 Diese Klasse enthält Methoden für Datumsarithmetik mit einem Referenzdatum als Startdatum. 9 """ 10 11 def __init__(self, referenz_datum: Optional[str] = None): 12 """ 13 Initialisierer für Datumsberechnungen. 14 15 Args: 16 referenz_datum: Referenzdatum im ISO-Format (YYYY-MM-DD). 17 Falls None, wird das aktuelle Datum verwendet. 18 """ 19 if referenz_datum is None: 20 # Aktuelles Datum verwenden 21 self._heute_datetime = datetime.now() 22 else: 23 # Referenzdatum aus ISO-String parsen (str: string parse time) 24 try: 25 self._heute_datetime = datetime.strptime(referenz_datum, '%Y-%m-%d') 26 except ValueError as e: 27 raise ValueError(f"Ungültiges Datumsformat '{referenz_datum}'. Erwartet: YYYY-MM-DD") from e 28 29 # Locale auf Deutsch setzen (falls verfügbar) 30 try: 31 locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8') 32 except locale.Error: 33 try: 34 locale.setlocale(locale.LC_TIME, 'German_Germany.1252') 35 except locale.Error: 36 # Fallback: Englisch verwenden 37 pass 38 39 def _formatiere_datum_mit_wochentag(self, datum: datetime) -> str: 40 """ 41 Formatiert ein Datum mit dem entsprechenden deutschen Wochentag. 42 43 Args: 44 datum: Das zu formatierende Datum 45 46 Returns: 47 String im Format DD.MM.YYYY (Wochentag), z.B. "15.01.2024 (Montag)" 48 """ 49 # Deutsche Wochentage 50 deutsche_wochentage = { 51 0: "Montag", 52 1: "Dienstag", 53 2: "Mittwoch", 54 3: "Donnerstag", 55 4: "Freitag", 56 5: "Samstag", 57 6: "Sonntag" 58 } 59 60 datum_str = datum.strftime("%d.%m.%Y") 61 wochentag = deutsche_wochentage[datum.weekday()] 62 63 return f"{datum_str} ({wochentag})" 64 65 def heute_plus_tage(self, anzahl_tage: int) -> str: 66 """ 67 Addiert Anzahl tage auf heutiges Datum und gibt das Ergebnisdatum zurück. 68 69 Args: 70 anzahl_tage: Anzahl Tage, die auf heutiges Datum zu addieren ist; 71 kann auch negativ sein. 72 73 Returns: 74 String mit Ergebnisdatum im Format DD.MM.YYYY (Wochentag), z.B. "15.01.2024 (Montag)". 75 """ 76 ergebnis_datum = self._heute_datetime + timedelta(days=anzahl_tage) 77 return self._formatiere_datum_mit_wochentag(ergebnis_datum) 78 79 def heute_minus_tage(self, anzahl_tage: int) -> str: 80 """ 81 Subtrahiert Anzahl Tage vom heutigen Datum und gibt das Ergebnisdatum zurück. 82 83 Args: 84 anzahl_tage: Anzahl Tage, die vom heutigen Datum zu subtrahieren ist; 85 sollte positiv sein. 86 87 Returns: 88 String mit Ergebnisdatum im Format DD.MM.YYYY (Wochentag), z.B. "15.01.2024 (Montag)". 89 """ 90 return self.heute_plus_tage(-anzahl_tage)
7class Datumsberechnungen: 8 """ 9 Diese Klasse enthält Methoden für Datumsarithmetik mit einem Referenzdatum als Startdatum. 10 """ 11 12 def __init__(self, referenz_datum: Optional[str] = None): 13 """ 14 Initialisierer für Datumsberechnungen. 15 16 Args: 17 referenz_datum: Referenzdatum im ISO-Format (YYYY-MM-DD). 18 Falls None, wird das aktuelle Datum verwendet. 19 """ 20 if referenz_datum is None: 21 # Aktuelles Datum verwenden 22 self._heute_datetime = datetime.now() 23 else: 24 # Referenzdatum aus ISO-String parsen (str: string parse time) 25 try: 26 self._heute_datetime = datetime.strptime(referenz_datum, '%Y-%m-%d') 27 except ValueError as e: 28 raise ValueError(f"Ungültiges Datumsformat '{referenz_datum}'. Erwartet: YYYY-MM-DD") from e 29 30 # Locale auf Deutsch setzen (falls verfügbar) 31 try: 32 locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8') 33 except locale.Error: 34 try: 35 locale.setlocale(locale.LC_TIME, 'German_Germany.1252') 36 except locale.Error: 37 # Fallback: Englisch verwenden 38 pass 39 40 def _formatiere_datum_mit_wochentag(self, datum: datetime) -> str: 41 """ 42 Formatiert ein Datum mit dem entsprechenden deutschen Wochentag. 43 44 Args: 45 datum: Das zu formatierende Datum 46 47 Returns: 48 String im Format DD.MM.YYYY (Wochentag), z.B. "15.01.2024 (Montag)" 49 """ 50 # Deutsche Wochentage 51 deutsche_wochentage = { 52 0: "Montag", 53 1: "Dienstag", 54 2: "Mittwoch", 55 3: "Donnerstag", 56 4: "Freitag", 57 5: "Samstag", 58 6: "Sonntag" 59 } 60 61 datum_str = datum.strftime("%d.%m.%Y") 62 wochentag = deutsche_wochentage[datum.weekday()] 63 64 return f"{datum_str} ({wochentag})" 65 66 def heute_plus_tage(self, anzahl_tage: int) -> str: 67 """ 68 Addiert Anzahl tage auf heutiges Datum und gibt das Ergebnisdatum zurück. 69 70 Args: 71 anzahl_tage: Anzahl Tage, die auf heutiges Datum zu addieren ist; 72 kann auch negativ sein. 73 74 Returns: 75 String mit Ergebnisdatum im Format DD.MM.YYYY (Wochentag), z.B. "15.01.2024 (Montag)". 76 """ 77 ergebnis_datum = self._heute_datetime + timedelta(days=anzahl_tage) 78 return self._formatiere_datum_mit_wochentag(ergebnis_datum) 79 80 def heute_minus_tage(self, anzahl_tage: int) -> str: 81 """ 82 Subtrahiert Anzahl Tage vom heutigen Datum und gibt das Ergebnisdatum zurück. 83 84 Args: 85 anzahl_tage: Anzahl Tage, die vom heutigen Datum zu subtrahieren ist; 86 sollte positiv sein. 87 88 Returns: 89 String mit Ergebnisdatum im Format DD.MM.YYYY (Wochentag), z.B. "15.01.2024 (Montag)". 90 """ 91 return self.heute_plus_tage(-anzahl_tage)
Diese Klasse enthält Methoden für Datumsarithmetik mit einem Referenzdatum als Startdatum.
12 def __init__(self, referenz_datum: Optional[str] = None): 13 """ 14 Initialisierer für Datumsberechnungen. 15 16 Args: 17 referenz_datum: Referenzdatum im ISO-Format (YYYY-MM-DD). 18 Falls None, wird das aktuelle Datum verwendet. 19 """ 20 if referenz_datum is None: 21 # Aktuelles Datum verwenden 22 self._heute_datetime = datetime.now() 23 else: 24 # Referenzdatum aus ISO-String parsen (str: string parse time) 25 try: 26 self._heute_datetime = datetime.strptime(referenz_datum, '%Y-%m-%d') 27 except ValueError as e: 28 raise ValueError(f"Ungültiges Datumsformat '{referenz_datum}'. Erwartet: YYYY-MM-DD") from e 29 30 # Locale auf Deutsch setzen (falls verfügbar) 31 try: 32 locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8') 33 except locale.Error: 34 try: 35 locale.setlocale(locale.LC_TIME, 'German_Germany.1252') 36 except locale.Error: 37 # Fallback: Englisch verwenden 38 pass
Initialisierer für Datumsberechnungen.
Args: referenz_datum: Referenzdatum im ISO-Format (YYYY-MM-DD). Falls None, wird das aktuelle Datum verwendet.
66 def heute_plus_tage(self, anzahl_tage: int) -> str: 67 """ 68 Addiert Anzahl tage auf heutiges Datum und gibt das Ergebnisdatum zurück. 69 70 Args: 71 anzahl_tage: Anzahl Tage, die auf heutiges Datum zu addieren ist; 72 kann auch negativ sein. 73 74 Returns: 75 String mit Ergebnisdatum im Format DD.MM.YYYY (Wochentag), z.B. "15.01.2024 (Montag)". 76 """ 77 ergebnis_datum = self._heute_datetime + timedelta(days=anzahl_tage) 78 return self._formatiere_datum_mit_wochentag(ergebnis_datum)
Addiert Anzahl tage auf heutiges Datum und gibt das Ergebnisdatum zurück.
Args: anzahl_tage: Anzahl Tage, die auf heutiges Datum zu addieren ist; kann auch negativ sein.
Returns: String mit Ergebnisdatum im Format DD.MM.YYYY (Wochentag), z.B. "15.01.2024 (Montag)".
80 def heute_minus_tage(self, anzahl_tage: int) -> str: 81 """ 82 Subtrahiert Anzahl Tage vom heutigen Datum und gibt das Ergebnisdatum zurück. 83 84 Args: 85 anzahl_tage: Anzahl Tage, die vom heutigen Datum zu subtrahieren ist; 86 sollte positiv sein. 87 88 Returns: 89 String mit Ergebnisdatum im Format DD.MM.YYYY (Wochentag), z.B. "15.01.2024 (Montag)". 90 """ 91 return self.heute_plus_tage(-anzahl_tage)
Subtrahiert Anzahl Tage vom heutigen Datum und gibt das Ergebnisdatum zurück.
Args: anzahl_tage: Anzahl Tage, die vom heutigen Datum zu subtrahieren ist; sollte positiv sein.
Returns: String mit Ergebnisdatum im Format DD.MM.YYYY (Wochentag), z.B. "15.01.2024 (Montag)".