Converting ISO 8601 date time to seconds in Python Converting ISO 8601 date time to seconds in Python python python

Converting ISO 8601 date time to seconds in Python


If you want to get the seconds since epoch, you can use python-dateutil to convert it to a datetime object and then convert it so seconds using the strftime method. Like so:

>>> import dateutil.parser as dp>>> t = '1984-06-02T19:05:00.000Z'>>> parsed_t = dp.parse(t)>>> t_in_seconds = parsed_t.timestamp()>>> t_in_seconds'455051100'

So you were halfway there :)


Your date is UTC time in RFC 3339 format, you could parse it using only stdlib:

from datetime import datetimeutc_dt = datetime.strptime('1984-06-02T19:05:00.000Z', '%Y-%m-%dT%H:%M:%S.%fZ')# Convert UTC datetime to seconds since the Epochtimestamp = (utc_dt - datetime(1970, 1, 1)).total_seconds()# -> 455051100.0

See also Converting datetime.date to UTC timestamp in Python

How do I convert it back to ISO 8601 format?

To convert POSIX timestamp back, create a UTC datetime object from it, and format it using .strftime() method:

from datetime import datetime, timedeltautc_dt = datetime(1970, 1, 1) + timedelta(seconds=timestamp)print(utc_dt.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))# -> 1984-06-02T19:05:00.000000Z

Note: It prints six digits after the decimal point (microseconds). To get three digits, see Formatting microseconds to 2 decimal places (in fact converting microseconds into tens of microseconds).


Here is a solution in Python 3:

$ date +%s1428030452$ TZ=US/Pacific date -d @1428030452 '+%Y%m%d %H:%M:%S %z'20150402 20:07:32 -0700$ TZ=US/Eastern date -d @1428030452 '+%Y%m%d %H:%M:%S %z'20150402 23:07:32 -0400$ python3>>> from datetime import datetime,timezone>>> def iso2epoch(ts):...     return int(datetime.strptime(ts[:-6],"%Y%m%d %H:%M:%S").replace(tzinfo=timezone.utc).timestamp()) - (int(ts[-2:])*60 + 60 * 60 * int(ts[-4:-2]) * int(ts[-5:-4]+'1'))...>>> iso2epoch("20150402 20:07:32 -0700")1428030452>>> iso2epoch("20150402 23:07:32 -0400")1428030452>>>