В Python, как вы конвертируете секунды с начала эпохи в объект `datetime`? - PullRequest
208 голосов
/ 12 сентября 2010

Модуль 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 таким же образом?

Ответы [ 4 ]

346 голосов
/ 12 сентября 2010

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)
29 голосов
/ 03 марта 2013

Секунды с эпохи до 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'
15 голосов
/ 08 января 2016

Из документов рекомендуемый способ получения объекта 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)
7 голосов
/ 15 мая 2013

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

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

См. Также Issue1646728

...