Maison >développement back-end >Tutoriel Python >Comment convertir correctement les objets de date Python en horodatages UTC ?

Comment convertir correctement les objets de date Python en horodatages UTC ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-15 08:50:10780parcourir

How to Correctly Convert Python Date Objects to UTC Timestamps?

Conversion d'objets date en horodatages UTC en Python

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.

Gestion des objets date en UTC

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.

Conversion d'objets Datetime en horodatages UTC

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn