103 votes

Obtenir un décalage UTC à partir du nom du fuseau horaire en python

Comment puis-je obtenir un décalage UTC à partir du nom du fuseau horaire en python ?

Par exemple : j'ai Asia/Jerusalem et je veux obtenir +0200

143voto

eumiro Points 56644

En raison de DST (Daylight Saving Time), le résultat dépend de la période de l'année :

import datetime, pytz

datetime.datetime.now(pytz.timezone('Asia/Jerusalem')).strftime('%z')

# returns '+0300' (because 'now' they have DST)


pytz.timezone('Asia/Jerusalem').localize(datetime.datetime(2011,1,1)).strftime('%z')

# returns '+0200' (because in January they didn't have DST)

83voto

Jon Skeet Points 692016

Avez-vous essayé d'utiliser le projet pytz et la méthodeutcoffset ?

par exemple

>>> import datetime
>>> import pytz
>>> pacific_now = datetime.datetime.now(pytz.timezone('US/Pacific'))
>>> pacific_now.utcoffset().total_seconds()/60/60
-7.0

1voto

Un autre détail de la réponse de @Jon Skeet, en supposant que vous avez déjà datetime.datetime objet, par exemple day = datetime.datetime(2021, 4, 24) :

import pytz
tz = pytz.timezone("Asia/Kolkata")

import datetime
day = datetime.datetime(2021, 4, 24)

offset = tz.utcoffset(day)/3600

0voto

William Mears Points 11

Une autre façon d'obtenir un décalage UTC comme entier :

import datetime
import pytz
from tzwhere import tzwhere

tzwhere = tzwhere.tzwhere()
timezone = pytz.timezone('Asia/Jerusalem')
offSet_str = str(timezone.utcoffset(datetime.datetime.now()))
if offSet_str[0] != '-':
    offSet = int(offSet_str[0])
else:
    offSet = int(offSet_str[8] + offSet_str[9]) - 24

print(offSet)

Jon Skeet a une méthode plus rapide

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