Ich bevorzuge Regex-Übereinstimmungen statt versuchen und außer. Dies ermöglicht viele Fallbacks von akzeptablen Formaten.
# full timestamp with milliseconds
match = re.match(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d+Z", date_string)
if match:
return datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%S.%fZ")
# timestamp missing milliseconds
match = re.match(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z", date_string)
if match:
return datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%SZ")
# timestamp missing milliseconds & seconds
match = re.match(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}Z", date_string)
if match:
return datetime.strptime(date_string, "%Y-%m-%dT%H:%MZ")
# unknown timestamp format
return false
Vergessen Sie nicht, "re" sowie "datetime" für diese Methode zu importieren.
Dies ergibt falsche Ergebnisse, wenn in 'date_string' nachfolgende Nullen aus dem Mikrosekundenteil weggelassen werden. – jez
@jez: Ja, deshalb habe ich gesagt, es sei "zu freizügig". Es funktioniert nur, wenn die Eingabe das erwartete Format hat (keine oder 6 Ziffern für Mikrosekunden). 2- über deine Editierung: schau dir die Frage an: 'datetime' ist die Klasse hier, nicht das Modul. – jfs