Подтвердить что ты не робот

Получить UTC смещение от имени часового пояса в python

Как я могу получить UTC смещение от имени часового пояса в python?

Например: у меня есть "Азия/Иерусалим", и я хочу получить "+0200"

4b9b3361

Ответ 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. После преобразования, форматируйте, как угодно.