python的日志记录模块在cygwin下报告错误的时区

0x4*_*B1D 6 python logging timezone

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

$ date
Tue, Aug 14, 2012  2:47:49 PM
Run Code Online (Sandbox Code Playgroud)

但是,python脚本是五个小时:

2012-08-14 19:39:06,438: Done!
Run Code Online (Sandbox Code Playgroud)

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

logging.basicConfig(format='%(asctime)-15s: %(message)s', level=logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)

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

Yun*_*ung 8

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

if os.getenv("TZ"):
    os.unsetenv("TZ")
Run Code Online (Sandbox Code Playgroud)


Jos*_*ngs 6

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

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

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