Skip to content

Instantly share code, notes, and snippets.

@squioc
Created July 9, 2012 20:49
Show Gist options
  • Save squioc/3078803 to your computer and use it in GitHub Desktop.
Save squioc/3078803 to your computer and use it in GitHub Desktop.
conversion between iso8601 date format and unix epoch datetime
from datetime import datetime
import calendar
def epoch_to_iso8601(timestamp):
"""
epoch_to_iso8601 - convert the unix epoch time into a iso8601 formatted date
>>> epoch_to_iso8601(1341866722)
'2012-07-09T22:45:22'
"""
return datetime.fromtimestamp(timestamp).isoformat()
def iso8601_to_epoch(datestring):
"""
iso8601_to_epoch - convert the iso8601 date into the unix epoch time
>>> iso8601_to_epoch("2012-07-09T22:27:50.272517")
1341872870
"""
return calendar.timegm(datetime.strptime(datestring, "%Y-%m-%dT%H:%M:%S.%f").timetuple())
if __name__ == "__main__":
import doctest
doctest.testmod()
@confiq
Copy link

confiq commented Jun 19, 2016

well, you have bug. iso8601_to_epoch() will not always work with standard.
Example: 2016-06-19T08:43:07.374Z. Z is UTC (https://en.wikipedia.org/wiki/ISO_8601#UTC)

>>> calendar.timegm(datetime.strptime(s, "%Y-%m-%dT%H:%M:%S.%f").timetuple())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/_strptime.py", line 328, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains: Z```

@blairg23
Copy link

blairg23 commented Feb 28, 2017

So much simpler:

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.strftime('%s')
>>> t_in_seconds
'455047500'

from: http://stackoverflow.com/a/27246418/1224827

@johntmyers
Copy link

That's not right. strftime will use local time zone, so you're epoch answer does not match 1984-06-02T19:05:00.000Z

@johntmyers
Copy link

Using actual UTC functions:

calendar.timegm(dateutil.parser.parse('2017-03-08T14:55:24Z').timetuple())

@sergei-bondarenko
Copy link

You can use that:

>>> from dateutil.parser import parse
>>> parse('2017-03-08T14:55:24Z').timestamp()
1488984924.0

@anksvault
Copy link

You can use that:

>>> from dateutil.parser import parse
>>> parse('2017-03-08T14:55:24Z').timestamp()
1488984924.0

Works well for me. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment