Convertir le datetime de python en timestamp et revenir en UTC utilise toujours le fuseau horaire local
je travaille avec un code qui me donne UTC timestamps et je veux les convertir en datetimes appropriées. Malheureusement, lorsque je teste des cas simples avec pytz, le datetime a 6 heures supplémentaires (le décalage CST vers UTC). Je dois garder les données de fuseau horaire correctes parce que je calcule la différence entre les autres fuseaux horaires aussi bien. Pourquoi et comment 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)
3 réponses
pour obtenir un objet datetime naïf qui représente le temps en UTC à partir de "seconds since the epoch" timestamp:
from datetime import datetime
utc_dt = datetime.utcfromtimestamp(ts)
si vous voulez obtenir un objet DateTime conscient pour UTC timezone:
import pytz
aware_utc_dt = utc_dt.replace(tzinfo=pytz.utc)
pour la convertir en un autre fuseau horaire:
tz = pytz.timezone('America/Montreal')
dt = aware_utc_dt.astimezone(tz)
pour convertir l'horodatage en un objet DateTime conscient dans le fuseau horaire donné directement:
dt = datetime.fromtimestamp(ts, tz)
Hmm j'ai trouvé la réponse ici: comment spécifier le fuseau horaire (UTC) lors de la conversion en temps 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>)
seriez-vous dans le fuseau horaire du CST américain ou l'équivalent?
ressemble à il montre quelle heure était dans UTC quand votre heure locale était un minuit de 1/1/2007.