这有点尴尬,但我一直没能找到关于这个主题的好资源。
我正在开发一个需要复杂时区转换的 Google App Engine 应用程序。由于我离强加的配额还差得很远,所以我选择了 PyTZ。但是,我一定做错了什么。到目前为止我所做的是:
- 下载 PyTZ 作为 tarball
- 安装它并将
pytz
目录复制到我的应用程序的根目录中(它是webapp
目录的兄弟,位于哪里app.yaml
)。
但是,如果我尝试实例化时区,PyTZ 似乎永远找不到任何时区。这是来自 GAE 交互式控制台的示例会话:
from pytz import timezone
rome = timezone('Europe/Rome')
输出如下:
Traceback (most recent call last):
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/admin/__init__.py", line 210, in post
exec(compiled_code, globals())
File "<string>", line 3, in <module>
File "/Library/Python/2.5/site-packages/pytz-2009j-py2.5.egg/pytz/__init__.py", line 157, in timezone
UnknownTimeZoneError: 'Europe/Rome'
我做错了什么?预先感谢您的帮助。
注意:如果我只是在本地使用 python 交互式 shell,事情会按预期工作:
>>> from pytz import datetime, timezone
>>> rome = timezone('Europe/Rome')
>>> rome.localize(datetime.datetime.now())
datetime.datetime(2009, 11, 12, 0, 4, 52, 990114, tzinfo=<DstTzInfo 'Europe/Rome' CET+1:00:00 STD>)
编辑:我需要澄清我没有使用 PyTZ 的压缩版本。我已将整个zoneinfo
目录包含在我的项目中:
pc-morena:pytz lyudmilangelov$ cd zoneinfo/
pc-morena:zoneinfo lyudmilangelov$ ls -l
total 448
drwxr-xr-x@ 55 lyudmilangelov staff 1870 Nov 10 12:48 Africa
drwxr-xr-x@ 135 lyudmilangelov staff 4590 Nov 10 12:48 America
drwxr-xr-x@ 12 lyudmilangelov staff 408 Nov 10 12:48 Antarctica
drwxr-xr-x@ 3 lyudmilangelov staff 102 Nov 10 12:48 Arctic
drwxr-xr-x@ 93 lyudmilangelov staff 3162 Nov 10 12:48 Asia
...