2013-08-08 3 views
1

я хочу, чтобы добавить UTC смещение в список часовых поясов от tz database, как: * (UTC +0) Европа/LondonSTD смещение для pytz часовых поясов

Для списка часовых поясов я использую pytz .common_timezones, но не могу получить STD utcoffset для часового пояса, потому что для всех методов в объекте с временной зоной требуется объект dt, момент времени, когда вычислять смещение.

Возможно получить смещение STD от объекта часового пояса pytz без манипуляции конкретными датами?

Спасибо!

ответ

3

Объекты pytztzinfo содержат время перехода UTC, которое указывает границу между STD и DST. Однако доступ к этой информации требует погружения в их частные атрибуты - в частности, tzone._utc_transition_times, tzone._transition_info. Итак, что следует за хрупкой - pytz не гарантирует, что вы можете получить доступ к той же информации таким же образом в будущих версиях.

Тем не менее, по крайней мере, для pytz версии 2010b, используя приведенные выше атрибуты, вы можете найти дату в самый последний период, который был в STD. Затем вы можете использовать std_date.strftime('%z') для печати смещения.

import pytz 
import datetime as DT 

NOW = DT.datetime.now() 
ZERO = DT.timedelta(0) 

for tname in pytz.common_timezones: 
    tzone = pytz.timezone(tname) 
    std_date = None 
    try: 
     for utcdate, info in zip(
       tzone._utc_transition_times, tzone._transition_info): 
      utcoffset, dstoffset, tzname = info 
      if dstoffset == ZERO: 
       std_date = utcdate 
      if utcdate > NOW: 
       break 
    except AttributeError: 
     std_date = NOW 
    std_date = tzone.localize(std_date)  
    print('{n} UTC{z}'.format(n=tname, z=std_date.strftime('%z'))) 

печатает

Africa/Abidjan UTC+0000 
Africa/Accra UTC+0000 
Africa/Addis_Ababa UTC+0235 
Africa/Algiers UTC+0000 
Africa/Asmara UTC+0235 
Africa/Bamako UTC+0000 
Africa/Bangui UTC+0114 
Africa/Banjul UTC+0000 
...