In Python, come si convertono i secondi dall'epoca in un oggetto `datetime`?


248

Il timemodulo può essere inizializzato usando i secondi dall'epoca:

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

Esiste un modo elegante per inizializzare un datetime.datetimeoggetto allo stesso modo?


3
per l'operazione opposta vai qui: convert-a-datetime-object-to-seconds
Trevor Boyd Smith

Risposte:


404

datetime.datetime.fromtimestamp lo farà, se conosci il fuso orario, potresti produrre lo stesso output di time.gmtime

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

o

>>> datetime.datetime.utcfromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 10, 19, 54)

42
stranamente, datetime.utcfromtimestampcrea un timestamp ingenuo. Ho dovuto import pytze usato datetime.fromtimestamp(1423524051, pytz.utc)per creare un datetime consapevole.
Matt

6
come un follow-on a quanto sopra, con Python> = 3.2 non si ha per importare la pytzlibreria se desideri solo il timestamp UTC - avete solo bisogno di from datetime import datetime, timezonee quindi si chiama come segue: datetime.fromtimestamp(1423524051, timezone.utc). Ha salvato la libreria aggiuntiva molte volte quando ho solo bisogno del fuso orario UTC da pytz.
phouse512,

38

Secondi dall'epoca datetimea strftime:

>>> ts_epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'

Dovrebbe essere datetime.fromtimestamp (1579366345) .strftime ('% Y-% m-% d% H:% M:% S')
vml19

26

Dai documenti, il modo consigliato per ottenere un oggetto datetime consapevole del fuso orario da pochi secondi dall'epoca è:

Python 3 :

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

Python 2 , usando pytz:

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

Un link alla documentazione nei sottotitoli ("Python 3", "Python 2") sarebbe utile - e raccomando anche di cambiarne l'ordine.
Adam Matan,

Aggiornato. Lasciare lo stesso ordine, poiché corrisponde ai documenti di Python.
Meistro

non è necessario pytzsolo per ottenere l' utcoggetto tzinfo. È facile crearlo da soli
jfs

9

Si noti che datetime.datetime. fromtimestamp (timestamp) e. utcfromtimestamp (timestamp) non riesce su Windows per le date precedenti al 1 gennaio 1970, mentre i timestamp unix negativi sembrano funzionare su piattaforme unix. I documenti dicono questo:

" Questo può aumentare ValueError, se il timestamp non rientra nell'intervallo di valori supportati dalla funzione C gmtime () della piattaforma. È comune che questo sia limitato agli anni dal 1970 al 2038 "

Vedi anche Numero 16676728


: o) sì, ancora 23 anni per farlo riparare
user3666197

5
potresti usare utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp), per aggirare il problema.
jfs
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.