Ab Python 3.7 datetime.datetime.fromisoformat()
können Sie Ihr Format verarbeiten:
>>> import datetime
>>> datetime.datetime.fromisoformat('2012-11-01T04:16:13-04:00')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)))
In älteren Python-Versionen ist dies nicht möglich, nicht ohne eine Menge sorgfältiger manueller Zeitzonendefinitionen.
Python enthält keine Zeitzonendatenbank, da diese zu schnell veraltet wäre. Stattdessen stützt sich Python auf externe Bibliotheken, die einen weitaus schnelleren Veröffentlichungszyklus haben können, um ordnungsgemäß konfigurierte Zeitzonen für Sie bereitzustellen.
Als Nebeneffekt bedeutet dies, dass das Parsen der Zeitzone auch eine externe Bibliothek sein muss. Wenn dateutil
es Ihnen zu schwer ist, verwenden Sie es iso8601
stattdessen. Es analysiert Ihr spezifisches Format einwandfrei:
>>> import iso8601
>>> iso8601.parse_date('2012-11-01T04:16:13-04:00')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=<FixedOffset '-04:00'>)
iso8601
ist satte 4KB klein. Vergleichen Sie die python-dateutil
148 KB dieses Tot.
Ab Python 3.2 kann Python einfache Offset-basierte Zeitzonen verarbeiten und %z
analysiert -hhmm
und +hhmm
Zeitzonen-Offsets in einem Zeitstempel. Das bedeutet, dass Sie für einen ISO 8601-Zeitstempel Folgendes :
in der Zeitzone entfernen müssen :
>>> from datetime import datetime
>>> iso_ts = '2012-11-01T04:16:13-04:00'
>>> datetime.strptime(''.join(iso_ts.rsplit(':', 1)), '%Y-%m-%dT%H:%M:%S%z')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=datetime.timezone(datetime.timedelta(-1, 72000)))
Das Fehlen einer ordnungsgemäßen ISO 8601-Analyse wird in der Python-Ausgabe 15873 verfolgt .