W Pythonie, w jaki sposób zamieniasz sekundy od epoki na obiekt `datetime`?

248

timeModuł może być zainicjowany za pomocą sekund od epoki:

>>> 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)

Czy istnieje elegancki sposób na zainicjowanie datetime.datetimeobiektu w ten sam sposób?

Adam Matan
źródło
3
dla operacji odwrotnej przejdź tutaj: konwersja-obiektu-
Trevor Boyd Smith

Odpowiedzi:

404

datetime.datetime.fromtimestamp zrobi, jeśli znasz strefę czasową, możesz wygenerować taki sam wynik jak z time.gmtime

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

lub

>>> datetime.datetime.utcfromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 10, 19, 54)
SilentGhost
źródło
42
dziwnie datetime.utcfromtimestamptworzy naiwny znacznik czasu. Musiałem import pytzi użyłem, datetime.fromtimestamp(1423524051, pytz.utc)aby utworzyć świadomą datę i godzinę.
Matt
6
jako follow-on do powyższego, z Pythonem> = 3.2, nie trzeba importować pytzbibliotekę, jeśli chcesz tylko UTC znacznik czasu - trzeba tylko from datetime import datetime, timezone, a potem nazwać to w następujący sposób: datetime.fromtimestamp(1423524051, timezone.utc). Zapisał dodatkową bibliotekę wiele razy, kiedy potrzebuję tylko strefy czasowej UTC pytz.
phouse512
38

Sekundy od epoki datetimedo strftime:

>>> ts_epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'
Seganku
źródło
Powinien to być datetime.fromtimestamp (1579366345) .strftime ('% Y-% m-% d% H:% M:% S')
vml19
26

Z dokumentów zalecany sposób uzyskania obiektu datetime uwzględniającego strefę czasową od sekund od epoki to:

Python 3 :

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

Python 2 , używając pytz:

from datetime import datetime
import pytz
datetime.fromtimestamp(timestamp, pytz.utc)
Meistro
źródło
Przydałby się link do dokumentacji w twoich podtytułach („Python 3”, „Python 2”) - zalecam również zmianę ich kolejności.
Adam Matan
Zaktualizowano Pozostawienie tej samej kolejności, ponieważ odpowiada ona dokumentom Pythona.
Meistro
nie potrzebujesz pytztylko uzyskać utcobiektu tzinfo. Łatwo jest go stworzyć samodzielnie
jfs
9

Zauważ, że datetime.datetime. fromtimestamp (znacznik czasu) i. utcfromtimestamp (znacznik czasu) nie działa w systemie Windows dla dat sprzed 1 stycznia 1970 r., podczas gdy ujemne znaczniki czasu unix wydają się działać na platformach opartych na systemie Unix. Dokumenty mówią tak:

Może to powodować wzrost wartości ValueError, jeśli znacznik czasu nie mieści się w zakresie wartości obsługiwanych przez funkcję gmtime () platformy C. Zwykle jest to ograniczone do lat od 1970 do 2038

Zobacz także numer 1646728

care
źródło
: o) tak, wciąż około 23 lata, aby to naprawić
3666197
5
można użyć utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp), aby go obejść.
jfs