В 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