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 to d.isoformat(' ')
. This starts with %Y-%m-%d %H:%M:%S
(2017-01-01 00:00:00
), but then:
- Either has nothing or
.%f
for microseconds; and - Either has nothing or an offset with a colon, which doesn't match
%z
.
.strptime
doesn't have support for optional parts, therefore there isn't a single format
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.
来源:https://stackoverflow.com/questions/43792568/how-to-parse-strmy-datetime-using-strptime