Как преобразовать объект Python time.struct_time
объект datetime.datetime
?
У меня есть библиотека, которая предоставляет первую и вторую библиотеку, которая хочет вторую.
Как преобразовать объект Python time.struct_time
объект datetime.datetime
?
У меня есть библиотека, которая предоставляет первую и вторую библиотеку, которая хочет вторую.
Используйте time.mktime(), чтобы преобразовать кортеж времени (по местному времени) в секунды с начала эпохи, затем используйте datetime.fromtimestamp(), чтобы получить объект datetime.
from datetime import datetime
from time import mktime
dt = datetime.fromtimestamp(mktime(struct))
Вот так:
>>> structTime = time.localtime()
>>> datetime.datetime(*structTime[:6])
datetime.datetime(2009, 11, 8, 20, 32, 35)
Это не прямой ответ на ваш вопрос (на который ответили довольно хорошо уже). Тем не менее, когда я несколько раз укусил меня на фундаменте, я не могу подчеркнуть, что вам следует внимательно посмотреть на то, что предоставляет ваш объект time.struct_time, а также другие поля времени.
Предполагая, что у вас есть как объект time.struct_time, так и какая-то другая строка даты/времени, сравните их и убедитесь, что вы не теряете данные и непреднамеренно создаете наивный объект datetime, когда вы можете сделать иначе.
Например, отличный модуль feedparser вернет "опубликованное" поле и может вернуть объект time.struct_time в поле "published_parsed":
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)
Теперь обратите внимание на то, что вы действительно получаете с "опубликованным" полем.
Mon, 09 Sep 2013 19:57:42 -0400
Stallman Борода! Информация о часовом поясе!
В этом случае ленивый человек может захотеть использовать отличный модуль dateutil для сохранения информации о часовом поясе:
from dateutil import parser
dt = parser.parse(entry["published"])
print "published", entry["published"])
print "dt", dt
print "utcoffset", dt.utcoffset()
print "tzinfo", dt.tzinfo
print "dst", dt.dst()
который дает нам:
published Mon, 09 Sep 2013 19:57:42 -0400
dt 2013-09-09 19:57:42-04:00
utcoffset -1 day, 20:00:00
tzinfo tzoffset(None, -14400)
dst 0:00:00
Затем можно было бы использовать объект datetime, поддерживающий часовой пояс, для нормализации всего времени до UTC или того, что, по вашему мнению, является удивительным.