【发布时间】: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