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