56 votes

Convertir une date python en timestamp et inversement en UTC utilise toujours le fuseau horaire local

Je travaille avec un code qui me donne des timestamps utc et je veux les convertir en dates appropriées. Malheureusement, lorsque je teste des cas simples avec pytz, la date est majorée de 6 heures (le décalage CST par rapport à UTC). J'ai besoin de garder les données de fuseau horaire correctes car je calcule également la différence entre les autres fuseaux horaires. Avez-vous une idée de la raison et de la manière de convertir un timestamp utc en datetime utc ?

In [1]: import pytz

In [2]: from datetime import datetime

In [3]: import time

In [4]: datetime.fromtimestamp(time.mktime(datetime(7,1,1, tzinfo=pytz.UTC).timetuple()), tz=pytz.UTC)
Out[4]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [5]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()), tz=pytz.UTC)
Out[5]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [6]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()))
Out[6]: datetime.datetime(2007, 1, 1, 0, 0)

121voto

J.F. Sebastian Points 102961

Pour obtenir un objet datetime naïf qui représente le temps en UTC à partir du timestamp "secondes depuis l'époque" :

from datetime import datetime

utc_dt = datetime.utcfromtimestamp(ts)

Si vous voulez obtenir un objet datetime conscient pour le fuseau horaire UTC :

import pytz

aware_utc_dt = utc_dt.replace(tzinfo=pytz.utc)

Pour le convertir dans un autre fuseau horaire :

tz = pytz.timezone('America/Montreal')
dt = aware_utc_dt.astimezone(tz)

Pour convertir directement l'horodatage en un objet datetime conscient dans le fuseau horaire donné :

dt = datetime.fromtimestamp(ts, tz)

26voto

aterrel Points 552

Hmm j'ai trouvé la réponse ici : Comment spécifier le fuseau horaire (UTC) lors de la conversion en heure Unix ? (Python)

In [101]: ts = calendar.timegm(datetime(2010, 7, 1, tzinfo=pytz.utc).timetuple())

In [102]: datetime.fromtimestamp(ts, tz=pytz.utc)
Out[102]: datetime.datetime(2010, 7, 1, 0, 0, tzinfo=<UTC>)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X