与time.strftime一起出现时区问题

时间:2010-12-06 15:23:41

标签: python ubuntu time timezone

我已经使用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”来自哪里......

任何帮助将不胜感激!

更新

根据评论中的建议:

  • /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 个答案:

答案 0 :(得分:0)

时间模块没有比调用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()是参数的默认值,所以这些不同之处超出了我的范围。