En Python, comment trouvez-vous le décalage de l'heure UTC de l'ordinateur?
gmtime()
renverra l’heure UTC et localtime()
renverra l’heure locale afin que la soustraction des deux donne le décalage utc.
import time
print -time.timezone
Il imprime le décalage UTC en secondes (pour prendre en compte l'heure d'été, voir time.altzone :
is_dst = time.daylight and time.localtime().tm_isdst > 0
utc_offset = - (time.altzone if is_dst else time.timezone)
où utc offset est défini via: "Pour obtenir l'heure locale, ajoutez utc offset à utc time."
Dans Python 3.3+, il existe tm_gmtoff
attribut si la bibliothèque C sous-jacente le prend en charge:
utc_offset = time.localtime().tm_gmtoff
Remarque: time.daylight
peut donner un résultat erroné dans certains cas Edge .
tm_gmtoff
est utilisé automatiquement par date-heure s'il est disponible sur Python 3.3+:
from datetime import datetime, timedelta, timezone
d = datetime.now(timezone.utc).astimezone()
utc_offset = d.utcoffset() // timedelta(seconds=1)
Pour obtenir le décalage UTC actuel de manière à résoudre le problème time.daylight
et que cela fonctionne même si tm_gmtoff
n'est pas disponible, la suggestion de @ jts pour sous-structurer l'heure locale et l'heure UTC peut être utilisée:
import time
from datetime import datetime
ts = time.time()
utc_offset = (datetime.fromtimestamp(ts) -
datetime.utcfromtimestamp(ts)).total_seconds()
Pour obtenir un décalage UTC pour les dates passées/futures, vous pouvez utiliser les fuseaux horaires pytz
:
from datetime import datetime
from tzlocal import get_localzone # $ pip install tzlocal
tz = get_localzone() # local timezone
d = datetime.now(tz) # or some other local date
utc_offset = d.utcoffset().total_seconds()
Cela fonctionne pendant les transitions DST, pour les dates passées/futures même si le fuseau horaire local avait un décalage UTC différent à l'époque, par exemple le fuseau horaire Europe/Moscou pour la période 2010-2015.
J'aime:
>>> strftime('%z')
'-0700'
J'ai d'abord essayé la réponse de JTS, mais elle m'a donné un résultat erroné. Je suis en -0700 maintenant, mais on disait que j'étais en -0800. Mais je devais faire une conversion avant de pouvoir obtenir quelque chose que je puisse soustraire, alors peut-être que la réponse était plus incomplète que incorrecte.
hours_delta = (time.mktime(time.localtime()) - time.mktime(time.gmtime())) / 60 / 60
Cette fonction simple vous aidera à obtenir l'heure actuelle à partir d'un objet date
de la base de données MySQL/PostgreSQL.
def timestamp(date='2018-05-01'):
return int(time.mktime(
datetime.datetime.strptime( date, "%Y-%m-%d" ).timetuple()
)) + int(time.strftime('%z')) * 6 * 6
>>> timestamp('2018-05-01')
1525132800
>>> timestamp('2018-06-01')
1527811200