Python:更改Windows时区后时间戳不正确

时间:2013-04-02 05:11:38

标签: python datetime timezone

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

import datetime
now = datetime.datetime.now()

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

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

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

为什么这样做以及我该怎样做才能阻止它?

1 个答案:

答案 0 :(得分:1)

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

这有什么重要意义吗?可以假设系统时区不会经常变化 - 或者至少不足以让用户无法简单地重新启动应用程序。

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

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

<强>更新

这是reported before,另一个问题是合理的解决方案。