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?


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)

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'

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)

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


: 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.