运行Windows XP,在Python应用程序中,我使用:
获取当前时间import datetime
now = datetime.datetime.now()
时间与系统时钟显示的时间匹配。但是,现在,应用程序仍在运行,我转到Windows时钟,选择时区并更改它。现在我再次使用上面的方法获得时间,这次它是不正确的——它给我的时间就好像我没有更改时区一样。
但是如果我关闭应用程序并重新启动它,然后获得时间,那么它与时钟匹配。这就好像它被"卡"在应用程序首先加载的任何时区。
有趣的是,这只会在时区改变时发生;如果我只更改时间(而不是时区),那么更改将在应用程序中正确更改。
这是为什么?我能做些什么来预防它?
我猜Python运行时在启动时读取系统时区,并使用UTC作为其基础。因此,当您更改时区而不更改时间时,Windows不会向Python发出更改任何内容的信号。我仍在查阅python文档来证实这个假设。
有什么重要的原因吗?您可以假设系统时区不会经常更改—或者至少不会频繁到用户无法简单地重新启动应用程序。
即使它为真,你也可以从Python调用更新缓存的时区值。
你在用pytz吗?或者只是单纯的约会?
这是以前报道过的,其他问题也有合理的解决方案。