Initialiser un object datetime avec des secondes depuis l’époque

Le module de time peut être initialisé en secondes depuis l’époque:

 >>> 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 object datetime.datetime de la même manière?

datetime.datetime.fromtimestamp fera, si vous connaissez le fuseau horaire, vous pouvez produire la même sortie 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) 

Secondes depuis l’époque jusqu’à la datetime et l’ strftime de strftime :

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

À partir de la documentation, la méthode recommandée pour obtenir un object datetime compatible avec les fuseaux horaires à partir de secondes depuis l’époque est:

Python 3 :

 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) 

Notez que datetime.datetime. à partir de l’ horodatage (horodatage) et. utcfromtimestamp (timestamp) échoue sur Windows pour les dates antérieures au 1er janvier 1970, tandis que les horodatages unix négatifs semblent fonctionner sur les plates-formes Unix. Les docs disent ceci:

” Cela peut augmenter ValueError, si l’horodatage est en dehors de la plage de valeurs prise en charge par la fonction de plate-forme C gmtime (). Il est courant que cela se limite aux années 1970 à 2038 ”

Voir aussi Issue1646728