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

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

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

3 ответа

Решение

Учитывая временную зону 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'
>>> 

Возможно, этого не было, когда изначально был написан этот вопрос, но вот фрагмент, чтобы получить официальное обозначение часового пояса:

>>> eastern = timezone('US/Eastern')
>>> eastern.zone
'US/Eastern'

Кроме того, это можно использовать с ненастным объектом datetime (также известным как datetime, где фактический часовой пояс был установлен с использованием pytz.<timezone>.localize(<datetime_object>) или datetime_object.astimezone(pytz.<timezone>) следующим образом:

>>> import datetime, pytz
>>> todaynow = datetime.datetime.now(tz=pytz.timezone('US/Hawaii'))
>>> todaynow.tzinfo # turned into a string, it can be split/parsed
<DstTzInfo 'US/Hawaii' HST-1 day, 14:00:00 STD>
>>> todaynow.strftime("%Z")
'HST'
>>> todaynow.tzinfo.zone
'US/Hawaii'

Это, конечно, для назидания тех пользователей поисковых систем, которые попали сюда.... Подробнее см. На сайте модуля pytz.

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

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

>>> 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'

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

>>> tz = timezone('America/St_Johns')
>>> normal = datetime(2009, 9, 1)
>>> tz.tzname(normal, is_dst=False)
'NDT'
Другие вопросы по тегам