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
,但用于设置时区,而不是获取它。
TZ 数据库时区名称存储为 pytz.timezone()
返回的区域对象的 zone
属性:
>>> import pytz
>>> import datetime
>>>
>>> timezone = pytz.timezone('Poland')
>>> date = timezone.localize(datetime.datetime(2018, 10, 1))
>>> date.tzinfo.zone
'Poland'
如您所见,区域对象本身在调用 localize()
后可用作date.tzinfo
,因此您可以直接使用它,而不是将名称传回pytz.timezone()
,如果这就是您需要它的原因。