В Python, как вы конвертируете секунды с эпохи в объект 'datetime'?

Модуль time может быть инициализирован с использованием секунд с эпохи:

>>> import time
>>> t1=time.gmtime(1284286794)
>>> t1
time.struct_time(tm_year=2010, tm_mon=9, tm_mday=12, tm_hour=10, tm_min=19, 
                 tm_sec=54, tm_wday=6, tm_yday=255, tm_isdst=0)

Есть ли элегантный способ инициализировать объект datetime.datetime таким же образом?

Ответ 1

datetime.datetime.fromtimestamp, если вы знаете часовой пояс, вы можете создать тот же результат, что и с time.gmtime

>>> datetime.datetime.fromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 11, 19, 54)

или

>>> datetime.datetime.utcfromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 10, 19, 54)

Ответ 2

Секунды с эпохи до datetime до strftime:

>>> ts_epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'

Ответ 3

Из документов рекомендуемый способ получения объекта datetime с указанием часового пояса в секундах с начала эпохи:

Python 3:

from datetime import datetime, timezone
datetime.fromtimestamp(timestamp, timezone.utc)

Python 2, используя pytz:

from datetime import datetime
import pytz
datetime.fromtimestamp(timestamp, pytz.utc)

Ответ 4

Обратите внимание, что datetime.datetime. fromtimestamp (timestamp) и utcfromtimestamp (timestamp) не работает в окнах для дат до 1 января 1970 года, тогда как отрицательные временные метки unix работают на платформах, основанных на Unix. Документы говорят это:

"Это может вызвать ValueError, если метка времени находится вне диапазона значения, поддерживаемые функцией C gmtime() платформы. Его общее для это должно быть ограничено годами с 1970 по 2038 год ".

См. также Issue1646728