pytz替代 - 使用OS时区作为源?

时间:2012-12-11 01:31:26

标签: python timezone dst pytz django-timezone

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

一个ctypes包装器或者不需要编译的东西是受欢迎的。

修改:the beast

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:1)

tzlocal module在* 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会这样做)。