2

有没有使用 OS timezone/dst 作为源的更简单的 pytz 替代方案?

欢迎使用 ctypes 包装器或不需要编译的东西。

编辑:野兽

4

2 回答 2

1

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 会这样做)。

于 2015-01-27T06:22:02.617 回答
1

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

如果您的目标系统有这个文件,这可能是更好的方法。

于 2012-12-11T02:08:01.023 回答