【问题标题】:Issue with timezone with time.strftimetime.strftime 的时区问题
【发布时间】:2010-12-06 15:23:41
【问题描述】:

我使用blockhosts 已经有一段时间了,到目前为止效果很好。我最近将 Ubuntu 更新到 10.10,我开始看到一些不稳定的行为。经过仔细检查,我注意到 /var/log/blockhosts.log 中有一堆错误:

ERROR: failed to parse date for ip 188.17.155.25, using now value: time data '2010-11-01 03:04:02 AMT' does not match format '%Y-%m-%d %H:%M:%S %Z'

时区显示为“AMT”(亚美尼亚时间)的事实很奇怪。我的时区设置为:

$ cat /etc/timezone
Europe/Amsterdam

我查看了处理和检查日期的blockhosts.py 的代码,我看到它正在作为time 对象处理。

以下代码说明了问题:

import time

now = time.time()

str1 = time.strftime('%Y-%m-%d %H:%M:%S %Z', time.localtime())
str2 = time.strftime('%Y-%m-%d %H:%M:%S %Z')

print str1
print str2

输出如下:

2010-12-06 16:18:47 AMT 
2010-12-06 16:18:47 CET

time.tzname 的值是('CET', 'CEST'),所以我不确定“AMT”是从哪里来的……

任何帮助将不胜感激!

更新:

来自 cmets 中的建议:

  • /etc/localtime 不是/usr/share/zoneinfo/Europe/Amsterdam 的符号链接,但它们是同一个文件:

$ ls -l /etc/localtime
-rw-r--r-- 1 root root 2917 2010-11-18 09:35 /etc/localtime
$ ls -l /usr/share/zoneinfo/Europe/Amsterdam
-rw-r--r-- 1 root root 2917 2010-11-11 09:35 /usr/share/zoneinfo/Europe/Amsterdam
$ diff /etc/localtime /usr/share/zoneinfo/Europe/Amsterdam

  • 没有 TZ 环境变量:

$ echo $TZ
$ env | grep TZ

  • 我以另一个用户身份登录并运行脚本,结果相同:

2010-12-07 11:12:09 AMT
2010-12-07 11:12:09 CET

【问题讨论】:

  • 我喜欢 python,但是 datetime sux bigtime。
  • 听起来像是一个可能的错误。在您的计算机上设置一个新的用户帐户,看看您是否可以在那里复制它。如果是这样,请尝试提交错误:bugs.launchpad.net/ubuntu/+source/python-defaults/+bugs
  • /etc/timezone 通常不是您设置时区的地方。 /etc/localtime 需要成为 /usr/share/zoneinfo/Europe/Amsterdam 中正确时区的符号链接——这是第一步。第二步是确保它被正确拾取。您可以使用“日期”(常规的旧 unix 命令)检查这一点,还可以验证您没有名为 TZ 的环境变量与您尝试使用的变量有任何不同。您应该注销并重新登录以确保 /etc/timezone 被区域设置/您的 shell 正确获取。然后尝试您的 python 代码。

标签: python ubuntu time timezone


【解决方案1】:

time 模块除了调用 unix C API 调用之外没有做太多事情,所以我首先会怀疑你的配置。

也就是说,time.strftime('%Y-%m-%d %H:%M:%S %Z', time.localtime())time.strftime('%Y-%m-%d %H:%M:%S %Z') 应该是等价的,因为 time.localtime() 是参数的默认值,所以它们有什么不同是我无法理解的。

【讨论】:

  • 我同意你的观点,这是我意识到的事情之一。正如我在上面的编辑中添加的那样,我无法在配置中找到任何错误。还有其他线索吗?
  • 不,这很正常。奇怪的。我现在倾向于它是一个非常非常非常奇怪的错误,甚至可能在 libc 中。 :) 报告它可能会有所帮助,但有 很多 错误,所以不要屏住呼吸。
猜你喜欢
  • 2017-07-08
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2017-12-03
  • 2020-09-18
  • 2015-03-17
  • 2013-09-16
  • 2016-09-12
相关资源
最近更新 更多