1

在 Python 应用程序中运行 Windows XP,我得到当前时间:

import datetime
now = datetime.datetime.now()

并且时间与系统时钟显示上的时间一致。但是,现在,应用程序仍在运行,我转到 Windows 时钟并选择时区并更改它。现在我用上面的方法再次得到时间,这一次是不正确的——它给了我时间,就好像我没有改变时区一样。

但是如果我关闭应用程序并重新启动它然后获取时间,那么它与时钟匹配。就好像它“卡在”应用程序首先加载的任何时区一样。

有趣的是,这只发生在时区更改时;如果我只是更改更改在应用程序中正确更改的时间(而不是时区)。

为什么会这样,我能做些什么来防止它?

4

1 回答 1

1

我的猜测是 Python 运行时在启动时读取系统时区,并使用 UTC 作为其基础。因此,当您更改时区而不更改时间时,Windows 不会向 Python 发出信号来更改任何内容。我仍在挖掘 python 文档以证实这一假设。

这有什么重要的原因吗?有人会假设系统时区不会经常更改 - 或者至少不会经常更改,以至于您的用户无法简单地重新启动应用程序。

即使这是真的,您也可能可以从 Python 调用来更新缓存的时区值。

你在用 pytz 吗?或者只是直接的日期时间?

更新

这个以前有报道过,另外一个问题也有合理的解决方案。

于 2013-04-02T20:06:21.310 回答