web-dev-qa-db-fra.com

En Python, comment convertir des secondes depuis Epoch en un objet `datetime`?

Le module time peut être initialisé en secondes depuis Epoch:

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

Existe-t-il un moyen élégant d’initialiser un objet datetime.datetime de la même manière?

209
Adam Matan

datetime.datetime.fromtimestamp fera, si vous connaissez le fuseau horaire, vous pourriez produire le même résultat qu'avec _time.gmtime_

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

ou

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

Secondes depuis Epoch jusqu'à 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'
30
Seganku

Depuis la documentation, la méthode recommandée pour obtenir un objet datetime prenant en compte le fuseau horaire à partir de secondes depuis Epoch est la suivante:

Python :

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

Python 2 , en utilisant pytz :

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

Notez que datetime.datetime . fromtimestamp (timestamp) et . tcfromtimestamp (timestamp) échouent sous Windows pour les dates antérieures au 1er janvier 1970, alors que les horodatages négatifs Unix semblent fonctionner sous unix. plates-formes Les docs disent ceci:

" Cela peut générer ValueError, si l'horodatage est en dehors de la plage de valeurs supportée par la fonction platform C gmtime (). Il est courant que cela soit limité aux années 1970 à 2038 "

Voir aussi Issue1646728

7
cbare