получить границы DST заданного часового пояса в python

Можно ли получить границы летнего времени заданного часового пояса с помощью pytz?


person nnachefski    schedule 10.09.2011    source источник


Ответы (1)


Вроде официально не поддерживается. Однако вы можете покопаться во внутренностях объекта DstTzInfo и получить его оттуда:

>>> from pytz import timezone
>>> tz = timezone('Europe/London')
>>> tz._utc_transition_times
[datetime.datetime(1, 1, 1, 0, 0), datetime.datetime(1916, 5, 21, 2, 0),
...
datetime.datetime(2036, 3, 30, 1, 0), datetime.datetime(2036, 10, 26, 1, 0),
datetime.datetime(2037, 3, 29, 1, 0), datetime.datetime(2037, 10, 25, 1, 0)]

Каждая запись соответствует записи в _transition_info:

>>> tz._transition_info
[(datetime.timedelta(0), datetime.timedelta(0), 'GMT'),
(datetime.timedelta(0, 3600), datetime.timedelta(0, 3600), 'BST'),
...
(datetime.timedelta(0, 3600), datetime.timedelta(0, 3600), 'BST'),
(datetime.timedelta(0), datetime.timedelta(0), 'GMT'),
(datetime.timedelta(0, 3600), datetime.timedelta(0, 3600), 'BST'),
(datetime.timedelta(0), datetime.timedelta(0), 'GMT')]

И источник сообщает нам, что они означают:

_utc_transition_times = None # Sorted list of DST transition times in UTC
_transition_info = None # [(utcoffset, dstoffset, tzname)] corresponding
                        # to _utc_transition_times entries

Конечно, это зависит от реализации, и вы, вероятно, захотите зависеть от конкретных версий pytz, которые, как известно, работают.

person Thomas    schedule 10.09.2011
comment
Не уверен, что вы имеете в виду под последней фразой. У Pytz есть модификации, как и у всего остального, но существуют ли на самом деле разные его реализации? - person Matt Johnson-Pint; 22.04.2017
comment
Кто знает? Вы обращаетесь к полю, начинающемуся со знака подчеркивания, которое не является частью задокументированного API. Авторы pytz могут изменить его в любой момент. - person Thomas; 28.04.2017
comment
Есть ли сейчас реализация в ядре Python? - person Hauke; 02.04.2019
comment
Не похоже. - person Thomas; 02.04.2019