我有一个应用程序,该应用程序带有通过boost::python
与C ++代码绑定的python脚本,结果遇到了一个问题,事实证明该问题可以用python解释器重现。
我发现datetime.now()
返回的时间和time.tzname
中的时区取决于解释器的运行时间。
复制步骤:
python
更改时区
timedatectl
import datetime, time
datetime.datetime.now()
和time.tzname
返回在时区更改之前有效的值如果解释器在时区更改之后运行,则值是正确的。如果我关闭了解释器(在我原来的问题中不可行,则该应用程序必须运行24/7)并运行一个新的解释器,一切正常。
导入库无关紧要,importlib.reload()
没有帮助。 python2
(2.7.15)没问题,但是我需要python3。
答案 0 :(得分:2)
在装入time.tzname
模块时,将time
信息设置一次。 time
模块中有一个显式方法可以将其重置,time.tzset()
:
重置库例程使用的时间转换规则。环境变量
TZ
指定如何完成此操作。它还将设置变量tzname
(来自TZ
环境变量),timezone
(UTC以西的非DST秒),altzone
(UTC以西的DST秒)。和daylight
(到0 if
时区没有任何夏令时规则,如果适用夏令时,则有一个时间,过去,现在或将来,则为非零)。
datetime.datetime.now()
不会产生带有时区的datetime对象;您通常会明确传递时区。