pytz 替代方案 - 使用操作系统时区作为源



有没有更简单的pytz替代方案使用操作系统时区/dst作为源?

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

编辑:野兽

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

如果目标系统具有此文件,则可能是更好的方法。

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

相关内容

  • 没有找到相关文章

最新更新