Как конвертировать time.struct_time
объект Python в datetime.datetime
объект?
У меня есть библиотека, которая предоставляет первую и вторую библиотеку, которая хочет вторую.
Используйте time.mktime (), чтобы преобразовать кортеж времени (по местному времени) в секунды с начала эпохи, затем используйте datetime.fromtimestamp (), чтобы получить объект datetime.
from datetime import datetime
from time import mktime
dt = datetime.fromtimestamp(mktime(struct))
tm_isdst
данные? Я думаю , что это так, в результате чего DATETIME объект остается наивным до такой степени , чтобы вернутьсяNone
на ,.dst()
даже еслиstruct.tm_isdst
это1
.mktime()
следуетtm_isdst
учитывать, и Pythontime.mktime()
вызываетmktime()
функцию C на CPython.mktime()
может выбрать неправильное местное время, когда оно неоднозначно (например, во время перехода в конце DST («откат»)), еслиstruct.tm_isdst
есть-1
или еслиmktime()
на данной платформе игнорирует вводtm_isdst
. Кроме того, если в прошлом местный часовой пояс имел различное смещение utc в прошлом, и Cmktime()
не использует историческую базу данных tz, которая может предоставить старые значения смещения utc, тоmktime()
может также вернуть неправильное (например, на час) значение.mktime()
не игнорироватьtm_isdst
на данной платформе (это делает на моей), то,fromtimestamp()
безусловно, теряет информацию: возвращаемый наивныйdatetime
объект, представляющий местное время, может быть неоднозначным (timestamp -> local time является детерминированным (если мы игнорируем високосные секунды), ноlocal time -> timestamp may be ambiguous e.g., during end-of-DST transition). Also,
fromtimestamp () `может выбрать неправильное смещение utc, если оно не использует историческую базу данных tz.Как это:
источник
*
и**
синтаксис позволяет вам расширить объект типа listy или dicty для разделения аргументов - это одна из моих любимых частей Python. См. Docs.python.org/2/tutorial/… для получения дополнительной информацииt=time.strptime("30 Jun 1997 22:59:60", "%d %b %Y %H:%M:%S"); datetime.datetime(*t[:6])
datetime
:datetime(*t[:5]+(min(t[5], 59),))
например, принять"2015-06-30 16:59:60 PDT"
.Это не прямой ответ на ваш вопрос (на который уже довольно неплохо ответили). Однако, несколько раз укусив меня за фундамент, я не могу не подчеркнуть, что вам следует внимательно присмотреться к тому, что предоставляет ваш объект time.struct_time, по сравнению с другими временными полями.
Предполагая, что у вас есть как объект time.struct_time, так и некоторая другая строка даты / времени, сравните их и убедитесь, что вы не теряете данные и случайно создаете наивный объект datetime, если вы можете сделать иначе.
Например, отличный модуль feedparser возвратит «опубликованное» поле и может вернуть объект time.struct_time в свое поле «ключ_публикованного»:
Теперь обратите внимание, что вы на самом деле получаете с «опубликованным» полем.
По Stallman Борода «s! Информация о часовом поясе!
В этом случае ленивый человек может захотеть использовать отличный модуль dateutil для хранения информации о часовом поясе:
что дает нам:
Затем можно использовать объект datetime с учетом часового пояса, чтобы нормализовать все время по UTC или что-то еще, что вы считаете удивительным.
источник
*_parsed
поля из feedparsed уже нормализованы к UTC, что можно проверить в документации разбора даты, так что это избыточно.datetime
объекте, который теряется приfeedparser
разборе необработанных строковых дат.