So in Python 3, you can generate an ISO 8601 date with .isoformat(), but you can't convert a string created by isoformat() back into a datetime object because Python's own datetime directives don't match properly. That is, %z = 0500 instead of 05:00 (which is produced by .isoformat()).
For example:
>>> strDate = d.isoformat() >>> strDate '2015-02-04T20:55:08.914461+00:00' >>> objDate = datetime.strptime(strDate,"%Y-%m-%dT%H:%M:%S.%f%z") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python34\Lib\_strptime.py", line 500, in _strptime_datetime tt, fraction = _strptime(data_string, format) File "C:\Python34\Lib\_strptime.py", line 337, in _strptime (data_string, format)) ValueError: time data '2015-02-04T20:55:08.914461+00:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
From Python's strptime documentation: (https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior)
%z UTC offset in the form +HHMM or -HHMM (empty string if the the object is naive). (empty), +0000, -0400, +1030
So, in short, Python does not even adhere to its own string formatting directives.
I know datetime is already terrible in Python, but this really goes beyond unreasonable into the land of plain stupidity.
Tell me this isn't true.
Custom DateTime Format Stringsvar output = localTime. ToString("yyyy-MM-ddTHH:mm:ssK"); var output = localTime. ToString("yyyy-MM-ddTHH:mm:ssK");
To get an ISO 8601 date in string format in Python 3, you can simply use the isoformat function. It returns the date in the ISO 8601 format. For example, if you give it the date 31/12/2017, it'll give you the string '2017-12-31T00:00:00'.
As of Python 3.7 there is a method datetime.fromisoformat()
which is exactly the reverse for isoformat()
.
If you have older Python, then this is the current best "solution" to this question:
pip install python-dateutil
Then...
import datetime import dateutil def getDateTimeFromISO8601String(s): d = dateutil.parser.parse(s) return d
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With