How to specify time zone (UTC) when converting to Unix time? (Python)

datetime, iso8601, python, unix-timestamp

Solution

You can create an `struct_time` in UTC with `datetime.utctimetuple()` and then convert this to a unix timestamp with `calendar.timegm()`:

calendar.timegm(parseddate.utctimetuple())

This also takes care of any daylight savings time offset, because `utctimetuple()` normalizes this.

Problem

I have a utc timestamp in the IS8601 format and am trying to convert it to unix time. This is my console session: ``` In [9]: mydate Out[9]: '2009-07-17T01:21:00.000Z' In [10]: parseddate = iso8601.parse_date(mydate) In [14]: ti = time.mktime(parseddate.timetuple()) In [25]: datetime.datetime.utcfromtimestamp(ti) Out[25]: datetime.datetime(2009, 7, 17, 7, 21) In [26]: datetime.datetime.fromtimestamp(ti) Out[26]: datetime.datetime(2009, 7, 17, 2, 21) In [27]: ti Out[27]: 1247815260.0 In [28]: parseddate Out[28]: datetime.datetime(2009, 7, 17, 1, 21, tzinfo=<iso8601.iso8601.Utc object at 0x01D74C70>) ``` As you can see, I can't get the correct time back. The hour is ahead by one if i use fromtimestamp(), and it's ahead by six hours if i use utcfromtimestamp() Any advice? Thanks!

Original source

Related problems