【发布时间】:2019-06-23 11:42:25
【问题描述】:
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,但用于设置时区,没有得到它。
【问题讨论】:
-
Poland比Europe/Warsaw更短且更易读,所以只要它有效,我就会继续使用它。 -
根据list of timezone names in Wikipedia
Poland已弃用,替换为Europe/Warsaw -
编译器不关心长度,使用标准名称可确保您不必检查它是否仍然有效,也不必修复一旦中断就忘记的代码。这也意味着您不必映射来自其他库、文件或程序的时区名称,甚至可能是您自己的
-
@PanagiotisKanavos 我在配置文件中使用它,它不会以任何方式干扰来自其他库、文件或程序的时区名称(在配置文件中它被转换为pytz 时区对象)。
标签: python python-3.x timezone python-3.5 pytz