HOWTO · Python
Convertir un horodatage Unix en date et heure en Python
Il introduit la conversion de l'époque en temps de date en Python
Sur cette page
Le temps Unix correspond à un nombre de secondes écoulées depuis le 1970-01-01 à 00:00:00 UTC. Un horodatage tel que 1606262400 désigne un instant ; pour le convertir en date lisible, il faut choisir un fuseau horaire. Utilisez datetime si vous avez besoin d’un objet date-heure, ou time si une valeur struct_time convient à votre tâche.
Convertir des secondes d’époque avec datetime.fromtimestamp()
Le module datetime de Python fournit datetime.fromtimestamp(), qui accepte un horodatage et renvoie un objet datetime. Par défaut, la méthode interprète l’horodatage dans le fuseau horaire local de la machine et renvoie un objet datetime naïf, qui ne contient aucune information de fuseau horaire. Passez timezone.utc pour obtenir un objet avec fuseau horaire représentant l’UTC.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from datetime import datetime, timezone
timestamp = 1606262400
utc_datetime = datetime.fromtimestamp(timestamp, timezone.utc)
print(utc_datetime)
Pour raccourcir l’importation lorsque vous utilisez souvent cette classe, écrivez from datetime import datetime et appelez datetime.fromtimestamp(...). La référence de fromtimestamp() décrit ses arguments et son comportement selon la plateforme. Aucune destination française n’étant disponible pour ce lien, sa cible anglaise est conservée. Lorsque vous échangez des instants entre systèmes, conservez-les en UTC, puis convertissez-les dans le fuseau horaire d’affichage à la frontière de l’application.
Convertir des secondes d’époque avec le module time
Le module time de Python propose deux conversions utiles. time.localtime() renvoie une valeur struct_time à neuf champs, interprétée dans le fuseau horaire local de la machine. time.gmtime() renvoie la valeur struct_time correspondante, basée sur l’UTC. Ce sont des valeurs temporelles structurées, et non des objets datetime.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import time
timestamp = 1554723620
local_value = time.localtime(timestamp)
utc_value = time.gmtime(timestamp)
print("Local:", local_value)
print("UTC:", utc_value)
La ligne locale dépend des paramètres de fuseau horaire du système ; ses champs horaires peuvent donc différer de ceux de la ligne UTC. Utilisez time.gmtime() lorsque vous avez besoin de champs UTC stables, et time.localtime() lorsque vous avez précisément besoin de la représentation locale de la machine.
Formater la date et l’heure converties
Les valeurs time et les objets datetime fournissent tous deux strftime() pour le formatage. Des directives comme %Y, %m, %d, %H, %M et %S représentent respectivement l’année, le mois, le jour, l’heure, les minutes et les secondes. La directive %d est portable pour afficher le jour du mois avec un zéro initial. La variante %-d supprime le zéro initial sur certaines plateformes, mais n’est pas prise en charge partout.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import time
timestamp = 1554723620
utc_value = time.gmtime(timestamp)
print(time.strftime("%Y-%m-%d %H:%M:%S", utc_value))
Vous pouvez utiliser datetime.strftime() avec les mêmes directives numériques. Les directives qui produisent des noms, comme %A et %B, ainsi que %c, qui dépend des paramètres régionaux, peuvent varier selon la configuration régionale du système ; ne vous fiez pas à leur texte pour des données lisibles par machine. Consultez strftime.org pour une référence de formatage.
Gérer l’UTC, les fuseaux horaires et les horodatages en millisecondes
Un horodatage représente un nombre de secondes écoulées depuis l’époque UTC, mais la conversion en heure locale utilise le fuseau horaire configuré sur la machine. Pour stocker ou calculer un instant réel, privilégiez une valeur UTC avec fuseau horaire. Pour l’afficher ailleurs, convertissez cette valeur avec astimezone(). Une valeur naïve renvoyée par défaut par datetime.fromtimestamp() n’indique pas son fuseau horaire : évitez donc de la traiter comme une valeur UTC, sauf si vous savez que c’était l’interprétation voulue.
Certaines API renvoient des millisecondes plutôt que des secondes. Un horodatage en millisecondes est généralement beaucoup plus grand qu’un horodatage en secondes actuel ; divisez-le par 1000 avant de le transmettre à l’une ou l’autre des API de conversion. Conservez la partie fractionnaire si la précision à la fraction de seconde est importante.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from datetime import datetime, timezone
timestamp_ms = 1606262400123
timestamp_seconds = timestamp_ms / 1000
utc_datetime = datetime.fromtimestamp(timestamp_seconds, timezone.utc)
print(utc_datetime)
La valeur finale inclut la fraction de seconde représentée par l’entrée. Pour un affichage local, appelez utc_datetime.astimezone() ; l’heure obtenue dépend du fuseau horaire configuré sur la machine. Conservez l’horodatage numérique d’origine si vous devez préserver l’instant indépendamment de son format d’affichage.