How do you convert a time.struct_time object into a datetime object? How do you convert a time.struct_time object into a datetime object? python python

How do you convert a time.struct_time object into a datetime object?


Use time.mktime() to convert the time tuple (in localtime) into seconds since the Epoch, then use datetime.fromtimestamp() to get the datetime object.

from datetime import datetimefrom time import mktimedt = datetime.fromtimestamp(mktime(struct))


Like this:

>>> structTime = time.localtime()>>> datetime.datetime(*structTime[:6])datetime.datetime(2009, 11, 8, 20, 32, 35)


This is not a direct answer to your question (which was answered pretty well already). However, having had times bite me on the fundament several times, I cannot stress enough that it would behoove you to look closely at what your time.struct_time object is providing, vs. what other time fields may have.

Assuming you have both a time.struct_time object, and some other date/time string, compare the two, and be sure you are not losing data and inadvertently creating a naive datetime object, when you can do otherwise.

For example, the excellent feedparser module will return a "published" field and may return a time.struct_time object in its "published_parsed" field:

time.struct_time(tm_year=2013, tm_mon=9, tm_mday=9, tm_hour=23, tm_min=57, tm_sec=42, tm_wday=0, tm_yday=252, tm_isdst=0)

Now note what you actually get with the "published" field.

Mon, 09 Sep 2013 19:57:42 -0400

By Stallman's Beard! Timezone information!

In this case, the lazy man might want to use the excellent dateutil module to keep the timezone information:

from dateutil import parserdt = parser.parse(entry["published"])print "published", entry["published"])print "dt", dtprint "utcoffset", dt.utcoffset()print "tzinfo", dt.tzinfoprint "dst", dt.dst()

which gives us:

published Mon, 09 Sep 2013 19:57:42 -0400dt 2013-09-09 19:57:42-04:00utcoffset -1 day, 20:00:00tzinfo tzoffset(None, -14400)dst 0:00:00

One could then use the timezone-aware datetime object to normalize all time to UTC or whatever you think is awesome.