Pytz правильное смещение часовых поясов с дневным светом

У меня есть функция, которая возвращает список городов + их смещения UTC

NOW = datetime.datetime.utcnow()
ZERO = datetime.timedelta(0)

result_list = {}

allowed_city = ['Europe/London', 'Europe/Amsterdam', 'Europe/Helsinki', 'Europe/Moscow', 
'Asia/Yekaterinburg', 'Asia/Novosibirsk', 'Asia/Shanghai', 'Asia/Tokyo']

for tname in allowed_city:
    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)

    key = std_date.strftime('%z')

    result_list[tname] = "%s UTC %s" % (key, tname)

и упорядочены по смещениям:

collections.OrderedDict(sorted(result_list.items(), key=lambda x: x[1]))

И получите следующий список:

+0000 UTC Europe/London
+0200 UTC Europe/Amsterdam
...
+0900 UTC Asia/Shanghai
+1000 UTC Asia/Tokyo

Но, например, в Шанхае UTC/GMT +8 часов. Это что-то с дневным светом или где проблема? Как я могу вернуть правильный список часовых поясов в зависимости от дневного света?


person pasichnyk.oleh    schedule 09.05.2015    source источник


Ответы (1)


Неправильно передавать время UTC в tzone.localize(), если только tzone не является UTC. Вместо этого используйте tzone.fromutc(std_date).

person jfs    schedule 09.05.2015