Проблема с часовым поясом с time.strftime

1

Я использовал 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

  • Я зарегистрировался как другой пользователь и запустил script с тем же результатом:

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

  • 0
    Я люблю Python, но datetime sux bigtime.
  • 0
    Похоже на возможную ошибку. Настройте новую учетную запись пользователя на своем компьютере и посмотрите, сможете ли вы скопировать ее там. Если это так, попробуйте сообщить об ошибке: bugs.launchpad.net/ubuntu/+source/python-defaults/+bugs
Показать ещё 1 комментарий
Теги:
timezone
time

1 ответ

0

Модуль времени не делает ничего, кроме вызова вызовов API Unix C, поэтому я бы заподозрил вашу конфигурацию в первую очередь.

Тем не менее, time.strftime('%Y-%m-%d %H:%M:%S %Z', time.localtime()) и time.strftime('%Y-%m-%d %H:%M:%S %Z') должны быть эквивалентны, поскольку time.localtime() является значением по умолчанию для аргумента, поэтому, как они отличаются друг от друга, вы находитесь за пределами меня.

  • 0
    Я согласен с вами здесь, это одна из вещей, которые я понял. Я не могу найти какую-либо ошибку в конфигурации, как я добавил к изменениям выше. Любые другие подсказки?
  • 0
    Нет, это все нормально. Странный. Сейчас я склоняюсь к тому, что это действительно очень странная ошибка, возможно даже в libc. :) Сообщение об этом может помочь, но есть много ошибок, поэтому не задерживайте дыхание.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню