Объекты pytz
tzinfo
содержат время перехода 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
...