Получить UTC смещение от имени часового пояса в python
Как я могу получить UTC смещение от имени часового пояса в python?
Например: у меня есть "Азия/Иерусалим", и я хочу получить "+0200"
Ответы
Ответ 1
Из-за DST (переход на летнее время) результат зависит от времени года:
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)
Ответ 2
Пробовали ли вы использовать проект pytz и utcoffset
метод?
например.
>>> import datetime
>>> import pytz
>>> pacific_now = datetime.datetime.now(pytz.timezone('US/Pacific'))
>>> pacific_now.utcoffset().total_seconds()/60/60
-7.0
Ответ 3
Я столкнулся с подобной проблемой при преобразовании в метку времени UTC из объекта datetime python. Мой datetime был временным агностиком (очень наивным) и как таковой astimezone
не работал.
Чтобы смягчить эту проблему, я сделал информацию о часовом поясе объекта datetime, а затем использовал описанную выше магию.
import pytz
system_tz = pytz.timezone(constants.TIME_ZONE)
localized_time = system_tz.localize(time_of_meeting)
fmt = "%Y%m%dT%H%M%S" + 'Z'
return localized_time.astimezone(pytz.utc).strftime(fmt)
Здесь constants.TIME_ZONE
, где у меня был часовой пояс по умолчанию для моих сохраняемых объектов.
Надеюсь, это поможет кому-то, кто пытается конвертировать объекты datetime python в UTC. После преобразования, форматируйте, как угодно.