Ich möchte eine Funktion schreiben, die eine Zeichenfolge und True
zurückgibt, wenn es eine gültige ISO-8601 Datetime ist - präzise in Mikrosekunden, einschließlich einer Zeitzone Offset - False
andernfalls.Validieren Sie eine ISO-8601-Datetime-Zeichenfolge in Python?
Ich habe otherquestions gefunden, dass verschiedene Arten von Parsen Datetime Strings liefern, aber ich mag nur True
im Fall von ISO-8601-Format zurückzukehren. Das Parsen hilft mir nicht, wenn ich nicht einen Fehler für Formate erzeugen kann, die nicht ISO-8601 entsprechen.
(Ich benutze die schöne arrow Bibliothek an anderer Stelle in meinem Code eine Lösung, die arrow
verwendet wäre willkommen..)
EDIT: Es scheint, dass eine allgemeine Lösung für „diese Zeichenfolge a gültiges ISO 8601 datetime "existiert nicht unter den üblichen Python-Datetime-Paketen.
Also, diese Frage schmaler zu machen, konkreter und verantwortlich, ich für ein Format-String absetzen, die eine Datetime-Zeichenfolge in dieser Form validieren:
'2016-12-13T21:20:37.593194+00:00'
Derzeit bin ich mit:
format_string = '%Y-%m-%dT%H:%M:%S.%f%z'
datetime.datetime.strptime(my_timestamp, format_string)
Dies gibt:
ValueError: time data '2016-12-13T21:20:37.593194+00:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
Das Problem mit dem Doppelpunkt in der UTC zu liegen scheint fset (+00:00
). Wenn ich einen Offset ohne einen Doppelpunkt verwende (z. B. '2016-12-13T21:20:37.593194+0000'
), wird dieser korrekt wie erwartet analysiert. Dies ist offensichtlich, weil 's %z
Token does not respect the UTC offset form that has a colon, nur die Form ohne, obwohl both are valid per the spec.
Das Format ist streng genug, dass es wäre nicht schwer, es einfach auf die harte Art und Weise zu validieren. –
Und Sie haben versucht ... was genau? – jonrsharpe
Haben Sie sich das Paket 'iso8601' auf PyPI angesehen? –