This question already has answers here:
Make Python respond to Windows timezone changes
(3个答案)
6年前关闭。
在Python应用程序中运行Windows XP,我得到了当前时间:
并且时间与系统时钟显示屏上的时间匹配。但是,现在,在应用程序仍在运行的情况下,我转到Windows时钟并选择“时区”并进行更改。现在,我再次使用上述方法获得时间,但是这次是不正确的,这给了我时间,好像我没有更改时区一样。
但是,如果我关闭该应用程序并重新启动它,然后获取时间,则它与时钟匹配。好像它“滞留”在应用程序首先加载的任何时区中。
有趣的是,这仅在时区更改时发生。如果我仅更改时间(而不是时区),则更改将在应用程序中正确更改。
为什么会这样,我该怎么做才能防止这种情况发生?
(3个答案)
6年前关闭。
在Python应用程序中运行Windows XP,我得到了当前时间:
import datetime
now = datetime.datetime.now()
并且时间与系统时钟显示屏上的时间匹配。但是,现在,在应用程序仍在运行的情况下,我转到Windows时钟并选择“时区”并进行更改。现在,我再次使用上述方法获得时间,但是这次是不正确的,这给了我时间,好像我没有更改时区一样。
但是,如果我关闭该应用程序并重新启动它,然后获取时间,则它与时钟匹配。好像它“滞留”在应用程序首先加载的任何时区中。
有趣的是,这仅在时区更改时发生。如果我仅更改时间(而不是时区),则更改将在应用程序中正确更改。
为什么会这样,我该怎么做才能防止这种情况发生?
最佳答案
我的猜测是Python运行时在启动时读取系统时区,并使用UTC作为其基础。因此,当您更改时区而不更改时间时,Windows到Python都没有信号更改任何内容。我仍在研究python文档以证实这一假设。
有什么重要的理由吗?有人会假设系统时区的变化不是很频繁-或至少没有足够频繁地变化,以至于用户无法简单地重新启动应用程序。
即使是真的,您可能也可以从Python进行调用以更新缓存的时区值。
您在使用pytz吗?或者只是连续的日期时间?
更新
这是reported before,另一个问题有一个合理的解决方案。
关于python - Python:更改Windows时区后时间戳不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15756574/