有没有使用 OS timezone/dst 作为源的更简单的 pytz 替代方案?
欢迎使用 ctypes 包装器或不需要编译的东西。
编辑:野兽
tzlocal
模块在 *nix 和 Win32 上找到pytz
与您的操作系统本地时区相对应的时区:
from datetime import datetime
from tzlocal import get_localzone # $ pip install tzlocal
print(datetime.now(get_localzone()))
# -> 2015-01-27 07:20:52.163408+01:00
您的发行版可能会修补pytz
模块以使用 OS tz 数据库而不是嵌入一个(例如,Ubuntu 会这样做)。
C 标准库函数期望在/etc/localtime
. 您可以使用 pytz 为它构建一个时区对象,如下所示:
>>> import datetime
>>> import pytz
>>> localtime = pytz.build_tzinfo('localtime', open('/etc/localtime', 'rb'))
>>> print datetime.datetime.now(localtime)
2012-12-11 10:02:40.566735+08:00
/etc/localtime
这里的一个限制是,无法从其内容中确定时区所指的时区,因此如果您想腌制日期时间对象或在机器之间传递对时区的引用,这可能会出现问题。
为了允许时区更新,一些 Linux 发行版还将实际时区名称写入/etc/timezone
,以便它们可以替换/etc/localtime
为正确的编译时区定义。如果您的目标操作系统这样做,您可以像这样使用该文件:
>>> with open('/etc/timezone', 'r') as fp:
... tzname = fp.read().strip()
...
>>> localtime = pytz.timezone(tzname)
>>> print datetime.datetime.now(localtime)
2012-12-11 10:06:36.234822+08:00
如果您的目标系统有这个文件,这可能是更好的方法。