【问题标题】:Python: time stamps incorrect after changing Windows time zone [duplicate]Python:更改Windows时区后时间戳不正确[重复]
【发布时间】:2013-03-23 07:15:35
【问题描述】:

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

import datetime
now = datetime.datetime.now()

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

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

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

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

【问题讨论】:

  • Microsoft 从未认真尝试过以有用的方式处理时区。如果这对您很重要,我建议您使用不同的操作系统。
  • @gnibbler 谢谢,但不可能;目标是制作在 Windows(以及其他平台)上运行的应用程序。

标签: python datetime timezone


【解决方案1】:

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

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

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

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

更新

一直是reported before,其他问题有合理的解决方案。

【讨论】:

  • 这有点不方便——应用程序(时间戳对它来说很重要)持续运行是最方便的,对于携带笔记本电脑的旅行者来说,这将搞砸他们的时间戳,除非他们关闭应用程序并重新启动。我还没有使用 pytz,只是直接的日期时间。感谢您研究如何让 Python 更新。
  • 我认为 dup 帖子中的答案对你有用。
  • 复制品大获成功!我在发帖之前搜索过,但没有找到那个。也有助于看到这不是我的错误编码的问题,而是一个更普遍的问题。我会在那里尝试解决方案,谢谢。
猜你喜欢
  • 2016-01-09
  • 2017-12-03
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
相关资源
最近更新 更多