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

Как получить общее имя для часового пояса pytz, например. EST/EDT для Америки/New_York

Учитывая часовой пояс pytz для конкретного пользователя (рассчитанный из его смещения), я хочу отобразить общее имя для этого часового пояса. Я предполагаю, что люди более привыкли видеть EST или PST, а не как Америка /NewYork .

Дает ли pytz мне эти стандартные имена, или мне придется вручную делать это через таблицу? Это потенциально может стать беспорядочным, поскольку, например, места EST в сезон и переход к показу EDT во время других.

4b9b3361

Ответ 1

Учитывая часовой пояс pytz для конкретного пользователя (рассчитанный из его смещения), я хочу отобразить общее имя для этого часового пояса. Я предполагаю, что люди более привыкли видеть EST или PST вместо того, чтобы писать как Америка/Нью-Йорк.

Если вам это нужно, это результат объекта datetime, локализованного с помощью pytz...

>>> import pytz as tz
>>> from datetime import datetime as dt
>>> CT = tz.timezone('America/Chicago')
>>>
>>> summer_day = dt(2010, 7, 4, 0, 1, 1)
>>> bar = CT.localize(summer_day, is_dst=None)
>>> bar.tzname()
'CDT'
>>>
>>> christmas = dt(2010, 12, 25, 0, 1, 1)
>>> foo = CT.localize(christmas, is_dst=None)
>>> foo.tzname()
'CST'
>>> 

Ответ 2

Вы можете использовать метод tzname() экземпляров tzinfo:

>>> tz = timezone('America/St_Johns')
>>> normal = datetime(2009, 9, 1)
>>> tz.tzname(normal, is_dst=False)
'NDT'

Ответ 3

Если вы ищете аббревиатуры, тогда есть несколько способов, которые приходят на ум.

Сначала будет:

>>> from pytz import timezone
>>> eastern = timezone('US/Eastern')
>>> eastern._tzname
'EST'

Хотя это ссылается на свойство с предыдущим одиночным подчеркиванием, оно может считаться закрытым и, возможно, не лучшим местом для его захвата. Другой - из локализованного объекта datetime.

>>> from datetime import datetime
>>> loc_dt = eastern.localize(datetime.now())
>>> loc_dt.strftime('%Z')
'EST'