Як в Python ви перетворюєте секунди з епохи в об'єкт `datetime`?


248

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
для зворотної операції перейдіть сюди: перетворіть дату-час-об'єкт-на-секунду
Тревор Бойд Сміт

Відповіді:


404

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)

42
химерно, 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). Тривалість ('% Y-% m-% d% H:% M:% S')
vml19

27

У документах рекомендований спосіб отримати об'єкт дати в часі, відомий часовому поясу з секунд з епохи:

Пітон 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. fromtimestamp (мітка часу) і. utcfromtimestamp (timestamp) не спрацьовує у вікнах на дати до 1 січня 1970 року, тоді як негативні часові позначки unix, здається, працюють на платформах на базі Unix. Документи говорять про це:

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

Див. Також випуск1646728


: o) так, ще близько 23 років, щоб виправити це
user3666197

5
ви можете використати його utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp)для обходу.
jfs
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.