如果在运行解释器后时区发生更改,则datetime.now返回错误的时间 背景 我有一个应用程序,它用C++代码通过 Boo::Python < /C>绑定,并且遇到了一个问题,它可以用Python解释器来复制。 问题
我发现如果在运行解释器后时区发生更改,则datetime.now返回错误的时间 背景 我有一个应用程序,它用C++代码通过 Boo::Python < /C>绑定,并且遇到了一个问题,它可以用Python解释器来复制。 问题,python,python-3.x,python-datetime,Python,Python 3.x,Python Datetime,我发现datetime.now()返回的时间和time.tzname中的时区取决于解释器运行的时间 复制步骤: 运行解释器(在我的例子中是3.6.5) python 更改时区 timedatectl 导入日期时间,时间 datetime.datetime.now()和time.tzname返回时区更改前有效的值 调查 如果在时区更改后运行解释器,则值是正确的。如果我关闭解释器(在我原来的问题中不可行,应用程序必须全天候运行)并运行一个新的解释器,一切都正常 导入库时,importlib.relo
datetime.now()返回的时间和time.tzname中的时区取决于解释器运行的时间
复制步骤:
运行解释器(在我的例子中是3.6.5)
python
更改时区
timedatectl
导入日期时间,时间
datetime.datetime.now()
和time.tzname
返回时区更改前有效的值
调查
如果在时区更改后运行解释器,则值是正确的。如果我关闭解释器(在我原来的问题中不可行,应用程序必须全天候运行)并运行一个新的解释器,一切都正常
导入库时,importlib.reload()
没有帮助python2(2.7.15)没有这个问题,但我需要python3。加载time
模块时,time.tzname
信息设置一次。时间
模块中有一个明确的方法来重新设置它:
重置库例程使用的时间转换规则。环境变量TZ
指定如何执行此操作。它还将设置变量tzname
(来自TZ
环境变量)、时区
(UTC以西非DST秒)、altzone
(UTC以西DST秒)和daylight
(如果此时区没有任何夏令时规则,则设置为0;如果夏令时适用于某个时间、过去、现在或将来,则设置为非零)
datetime.datetime.now()
不会生成带时区的datetime对象;通常会显式传入时区。加载time
模块时,time
信息只设置一次。time
模块中有一个显式方法可以重新设置它:
重置库例程使用的时间转换规则。环境变量TZ
指定如何执行此操作。它还将设置变量tzname
(来自TZ
环境变量)、timezone
(UTC以西非DST秒)、altzone
(UTC以西DST秒)和daylight
(如果此时区没有任何夏令时规则,则设置为0;如果夏令时适用于过去、现在或将来的某个时间,则设置为非零)
datetime.datetime.now()
不会生成带有时区的datetime对象;通常会显式传入时区