Ich versuche herauszufinden, ob eine bestimmte Datumszeichenfolge alle drei Komponenten enthält: Tag, Monat und JahrPython

Python-Programme
Guest
 Ich versuche herauszufinden, ob eine bestimmte Datumszeichenfolge alle drei Komponenten enthält: Tag, Monat und Jahr

Post by Guest »

Ich versuche herauszufinden, ob eine bestimmte Datumszeichenfolge alle drei Komponenten enthält: Tag, Monat und Jahr.
Beispieleingaben und erwartete Ausgaben:
  • "2025-01-01" → True (Alle Komponenten sind vorhanden)
  • "31. Januar 2026" → True (Natürliches Sprachformat mit allen Komponenten)
  • „Januar 2026“ → Falsch (Tag fehlt)
  • „2026“ → Falsch (Monat und Tag fehlen)
  • "2025-01" -> Falsch
Ansatz, den ich verwende:
Ich verwende derzeit das dateutil. parser.parse-Funktion zum Parsen der Datumszeichenfolge und prüfen Sie dann, ob die Attribute Jahr, Monat und Tag im resultierenden Datum/Uhrzeit-Objekt gültig sind. Allerdings füllt die Parse-Funktion fehlende Komponenten mit Standardwerten auf, sodass es schwierig ist, festzustellen, ob diese Komponenten explizit in der Eingabezeichenfolge bereitgestellt wurden. Deshalb habe ich die folgende Logik geschrieben, um dieses Problem zu umgehen.

Code: Select all

def parse_date(date_string):
try:
default_dt1 = datetime(1,1,1)
default_dt2 = datetime(2,2,2)
parsed_date1 = dateutil.parser.parse(date_string,default=default_dt1)
parsed_date2 = dateutil.parser.parse(date_string,default=default_dt2)
if parsed_date1 == parsed_date2:
# print(parsed_date1.month)
return True
return False
except (ValueError,TypeError):
return False
So funktioniert es:
Standarddaten:

Die Funktion verwendet zwei Standarddaten, datetime(1, 1, 1) und datetime(2, 2, 2), um fehlende Komponenten beim Parsen der eingegebenen Datumszeichenfolge zu ergänzen.
Parsing:
Es analysiert den Datumsstring zweimal mit dem parser.parse-Funktion (aus dem dateutil.parser-Modul) mit den zwei verschiedenen Standarddaten.
Wenn in der Datumszeichenfolge Komponenten fehlen (wie ein Tag oder ein Monat), Parser .parse verwendet die Standardeinstellungen, um die Lücken zu füllen.
Vergleich:

Wenn beide analysierten Ergebnisse gleich sind, zeigt dies an, dass der date_string Alle Komponenten fehlen, da sie fehlen Komponenten würden aufgrund der unterschiedlichen Standardeinstellungen zu Unterschieden in den beiden geparsten Datumsangaben führen.
Frage:

Wie kann ich zuverlässig prüfen, ob eine Datumszeichenfolge explizit alle drei enthält? Komponenten, ohne sich auf die von dateutil hinzugefügten Standardwerte zu verlassen? Gibt es einen besseren Weg, dies zu erreichen? Ich habe versucht, die Standardwerte „Keine“ anzugeben, aber es funktioniert nicht. Überraschenderweise gibt es keine Standardfunktionalität, um dies zu erreichen.
Hinweis: Das Eingabeformat ist nicht konsistent.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post