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


249

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объекта таким же образом?


3
для противоположной операции перейдите по ссылке: convert-a-datetime-object-to-секунды
— Тревор Бойд Смит

Ответы:


405

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)

43
причудливо, datetime.utcfromtimestampсоздает наивную временную метку. Мне пришлось import pytzи использовать, datetime.fromtimestamp(1423524051, pytz.utc)чтобы создать осведомленную дату и время.
— Мэтт

6
как последующих по указанному выше, с Python> = 3.2 вы не должны импортировать pytzбиблиотеку , если вы хотите только UTC метку времени - вам нужно только , from datetime import datetime, timezoneа затем вызвать его следующим образом : datetime.fromtimestamp(1423524051, timezone.utc). Он много раз сохранял дополнительную библиотеку, когда мне нужен только часовой пояс UTC pytz.
— phouse512

38

Секунды с эпохи 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'

Это должно быть datetime.fromtimestamp (1579366345) .strftime ('% Y-% m-% d% H:% M:% S')
— vml19

27

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

Будет полезна ссылка на документацию в ваших субтитрах («Python 3», «Python 2») - и я также рекомендую изменить их порядок.
— Адам Матан

Обновлено. Оставляя порядок тот же, так как это соответствует документации Python.
— Meistro

вам не нужно pytzпросто получить utcобъект tzinfo. Это легко создать самому
— JFS

9

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

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

Смотрите также Issue1646728


: о) да, еще около 23 лет, чтобы это исправить
— user3666197

5
Вы можете использовать utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp), чтобы обойти это.
— Jfs
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.