Ich habe eine Python-Methode, die eine Datumseingabe als Zeichenfolge akzeptiert .
Wie füge ich eine Validierung hinzu, um sicherzustellen, dass sich die an die Methode übergebene Datumszeichenfolge in der ffg befindet? Format:
'YYYY-MM-DD'
Wenn dies nicht der Fall ist, sollte die Methode einen Fehler auslösen
Antworten:
quelle
Die Python-
dateutil
Bibliothek ist dafür (und mehr) konzipiert. Es konvertiert dies automatisch in eindatetime
Objekt für Sie und löst ein aus,ValueError
wenn dies nicht möglich ist.Als Beispiel:
Dies löst ein aus,
ValueError
wenn das Datum nicht richtig formatiert ist:dateutil
Dies ist auch äußerst nützlich, wenn Sie in Zukunft andere Formate analysieren müssen, da es die meisten bekannten Formate intelligent verarbeiten kann und Sie Ihre Spezifikation ändern können:dateutil
Analysebeispiele .Es behandelt auch Zeitzonen, wenn Sie das brauchen.
Aktualisierung basierend auf Kommentaren :
parse
Akzeptiert auch das Schlüsselwortargument,dayfirst
das steuert, ob der Tag oder der Monat an erster Stelle stehen soll, wenn ein Datum nicht eindeutig ist. Dies ist standardmäßig False. Z.Bquelle
parse('13/12/2001')
ist "13 Dec", aberparse('11/12/2001')
ist "12 Nov" (das erste Ergebnis würde hier "11 Dec" vorschlagen).parse
Tatsächlich wird eindayfirst
Schlüsselwortargument verwendet, mit dem Sie dies steuern können.parse('11/12/2001', dayfirst=True)
wird "11 Dec." Die Standardeinstellung von dateutil istdayfirst=False
datetutil.parser.parse()
zu viele Zeitformate akzeptiert (Sie könnten andere Beispiele mit mehrdeutiger Eingabe finden). Wenn Sie möchten bestätigen , dass Ihre Eingabe in YYYY-MM-DD - Format dann dasparse()
ist Funktion das falsche Werkzeug..parse()
die Formatzeichenfolge zusätzlich zumdatetime
Objekt zurückzugeben?Ich denke, die vollständige Validierungsfunktion sollte folgendermaßen aussehen:
Nur ausführen
ist nicht genug, da die strptime-Methode nicht überprüft, ob Monat und Tag des Monats mit Nullen aufgefüllte Dezimalzahlen sind. Beispielsweise
wird fehlerfrei ausgeführt.
quelle
datetime.strptime(date_text, "%Y-%m-%d")
?..dies löst ein aus,
ValueError
wenn es ein inkompatibles Format empfängt...wenn Sie sich häufig mit Datums- und Uhrzeitangaben beschäftigen (im Sinne von Datums- / Uhrzeitobjekten im Gegensatz zu Unix-Zeitstempel-Floats), ist es eine gute Idee, in das Pytz-Modul zu schauen und für Speicher / Datenbank alles in UTC zu speichern .
quelle
Dies ist der einfachste Weg:
quelle