time.strftime的时区问题
我已经使用blockhosts一段时间了,感觉挺不错的。最近我把Ubuntu更新到了10.10,结果开始出现一些奇怪的情况。仔细查看后,我发现/var/log/blockhosts.log里有一堆错误信息:
错误:无法解析IP 188.17.155.25的日期,使用当前时间:
时间数据 '2010-11-01 03:04:02 AMT' 与格式 '%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”是从哪里来的……
任何帮助都非常感谢!
更新:
根据评论中的建议:
/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
1 个回答
时间模块其实就是在调用一些Unix系统的C语言接口,所以我首先会怀疑你的配置是否有问题。
不过,time.strftime('%Y-%m-%d %H:%M:%S %Z', time.localtime())
和 time.strftime('%Y-%m-%d %H:%M:%S %Z')
应该是一样的,因为time.localtime()
是默认的参数,所以我也搞不懂它们有什么不同。