6

我正在运行 python 脚本,该脚本在 Windows 7 上的 cygwin 下使用日志记录模块。该date命令报告正确的时间:

$ date
Tue, Aug 14, 2012  2:47:49 PM

但是,python 脚本要休息五个小时:

2012-08-14 19:39:06,438: Done!

当我为脚本配置日志记录时,我没有做任何花哨的事情:

logging.basicConfig(format='%(asctime)-15s: %(message)s', level=logging.DEBUG)

有人可以告诉我发生了什么以及如何解决吗?

4

2 回答 2

8

在导入任何日期/时间模块之前,您需要在 python 脚本中取消设置环境“TZ”。它由 cygwin 设置,但 Windows 不理解:

if os.getenv("TZ"):
    os.unsetenv("TZ")
于 2012-08-16T01:27:49.317 回答
4

似乎如果TZ设置了环境变量,Cygwin 中的 Python 将在 GMT (UTC) 时区运行。即使TZ设置为与 Windows 框相同的时区也是如此!

作为一种解决方法,您可以unset TZ在调用 Python 之前调用 bash shell,然后 Python 将使用 Windows 时区。对我来说,删除 Python 中的 ENV 变量不起作用,它需要在启动 Python 之前发生(即使os.environ['TZ']在导入任何与时间相关的模块之前在 Python 进程中尽早删除,可能是因为必须导入os,也许这会触发 Cygwin/Python “错误”,从而使时区变为 UTC?)。

unset TZ可以通过添加到 .bash_profile 文件(/home/<user>其中是 Cygwin 安装位置的子目录)来自动修复。

于 2014-11-07T00:09:30.900 回答