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

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

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

Ответы [ 3 ]

36 голосов
/ 10 мая 2011

Учитывая временную зону 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'
>>> 
6 голосов
/ 10 мая 2011

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

>>> tz = timezone('America/St_Johns')
>>> normal = datetime(2009, 9, 1)
>>> tz.tzname(normal, is_dst=False)
'NDT'
4 голосов
/ 10 мая 2011

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

Первый будет:

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