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)
20
demandé sur aterrel 2011-05-11 01:22:56

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)
63
répondu jfs 2015-02-12 15:18:02

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>)
15
répondu aterrel 2017-05-23 12:02:38

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.

1
répondu Olaf 2011-05-10 21:44:00