Как я могу убедить объект DateTime (инициализированный с помощью часового пояса pytz) получить код часового пояса, распознаваемый pytz?(Python) - PullRequest
0 голосов
/ 30 января 2019
import pytz
import datetime

timezone = pytz.timezone('Poland')
date = timezone.localize(datetime.datetime(2018, 10, 1))
pytz.timezone(date.tzname())

К сожалению, в Python 3.5.2 с ним происходит сбой при

Traceback (most recent call last):
  File "timezones.py", line 6, in <module>
    pytz.timezone(date.tzname())
  File "/usr/local/lib/python3.5/dist-packages/pytz/__init__.py", line 178, in timezone
    raise UnknownTimeZoneError(zone)
pytz.exceptions.UnknownTimeZoneError: 'CEST'

В одной части программы создан часовой пояс с указанием объекта времени.В другой части необходимо вернуть идентификатор часового пояса.

Чтобы избежать проблем с XY: я вычисляю данные о восходе и заходе солнца с использованием библиотеки skyfield.Для этого мне нужно передать часовой пояс как один из параметров.

Из того, что я вижу в https://docs.python.org/3/library/datetime.html, есть timezone, но для установки часового пояса, а не его получения.

1 Ответ

0 голосов
/ 30 января 2019

Имя часового пояса базы данных TZ сохраняется как атрибут zone объекта зоны, возвращаемого pytz.timezone():

>>> import pytz
>>> import datetime
>>> 
>>> timezone = pytz.timezone('Poland')
>>> date = timezone.localize(datetime.datetime(2018, 10, 1))
>>> date.tzinfo.zone
'Poland'

Как видите, сам объект зоны доступен как date.tzinfoпосле вызова localize(), так что вы можете просто использовать это напрямую вместо передачи имени обратно в pytz.timezone(), если вам это нужно.

...