Je travaille avec un code qui me donne des horodatages utc et je veux les convertir en datetimes appropriés. Malheureusement, lorsque je teste des cas simples avec pytz, le datetime dispose de 6 heures supplémentaires (le décalage CST à UTC). Je dois garder les données de fuseau horaire correctes car je calcule également la différence entre les autres fuseaux horaires. Des idées pourquoi et comment convertir un horodatage utc en un 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)
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>)
Pour obtenir un objet datetime naïf qui représente le temps en UTC à partir de l'horodatage "secondes depuis l'époque":
from datetime import datetime
utc_dt = datetime.utcfromtimestamp(ts)
Si vous souhaitez 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)
Vous trouveriez-vous dans le fuseau horaire du CST américain ou équivalent?
On dirait qu'il montre quelle heure était en UTC lorsque votre heure locale était à minuit du 1/1/2007.