This is the default string representation of a datetime:
>>> from datetime import datetime, timezone
>>> dt = datetime(2017, 1, 1, tzinfo=timezone.utc)
>>> print(dt)
2017-01-01 00:00:00+00:00
What is the correct format string to parse that with datetime.strptime
? That is, what goes in place of the '???' to see the following result:
>>> from dateutil.parser import parse
>>> parse(date_str) == datetime.strptime('???', date_str)
True
Note that
str(d)
is documented as being equivalent tod.isoformat(' ')
. This starts with%Y-%m-%d %H:%M:%S
(2017-01-01 00:00:00
), but then:.%f
for microseconds; and%z
..strptime
doesn't have support for optional parts, therefore there isn't a singleformat
parameter that can match all of these possible outputs, and doesn't support the colon in the offset, so some can't be handled at all.It is not possible using
strptime
, as has been explained here.Upgrade to Python 3.7, and use the
datetime.fromisoformat
method.Contributed by Paul Ganssle in issue15873.