Dans de nombreux scénarios, la gestion des dates et des heures en Python nécessite de les convertir en horodatages UTC pour une intégration transparente avec d’autres systèmes ou cadres fonctionnant en temps universel coordonné. Cependant, ce processus de conversion pourrait rencontrer des obstacles. Par exemple, l'extrait ci-dessous produit un résultat inattendu :
import datetime d = datetime.date(2011, 01, 01) # A date object timestamp = datetime.datetime.utcfromtimestamp(time.mktime(d.timetuple())) print(timestamp) # Output: datetime.datetime(2010, 12, 31, 23, 0)
Le résultat attendu serait l'horodatage UTC du 1er janvier 2011, mais à la place, nous obtenons le 31 décembre 2010 à 23h00 UTC.
Explorons la solution à ce problème et comprenons comment obtenir les horodatages UTC corrects pour les objets date dans Python.
L'objet date fourni d est un objet date Python natif représentant une date sans aucune information temporelle. Pour obtenir l'horodatage UTC correct, nous devons nous assurer que l'objet date est explicitement pris en compte dans le contexte UTC.
Voici deux méthodes pour y parvenir :
Option 1 : Utilisation de Calendar.timegm()
Cette approche suppose que l'objet date d est au format UTC fuseau horaire.
import calendar timestamp = calendar.timegm(d.timetuple()) print(timestamp) # Output: 1293840000
La sortie est l'horodatage UTC correct pour le 1er janvier 2011 à 00h00.
Option 2 : Utiliser datetime.timestamp()
Cette option est disponible dans les versions Python 3.3 et ultérieures et nous oblige à spécifier explicitement le fuseau horaire UTC avant d'obtenir le horodatage.
from datetime import timezone d_utc = d.replace(tzinfo=timezone.utc) # Explicitly specify UTC timezone timestamp = d_utc.timestamp() print(timestamp)
Le résultat est cohérent avec les approches précédentes.
Si vous avez un objet datetime au lieu d'un objet date, le processus de conversion est légèrement différent. Vous pouvez utiliser les méthodes suivantes :
Python 3.3
timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
Python 3 (< 3.3)
timestamp = (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)) / timedelta(seconds=1)
Python 2
timestamp = (dt - datetime(1970, 1, 1)).total_seconds()
N'oubliez pas de vous méfier des problèmes potentiels de virgule flottante et assurez-vous de l'exactitude de vos horodatages.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!