Проблема с часовым поясом с time.strftime - PullRequest
1 голос
/ 06 декабря 2010

Я уже некоторое время использую 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<br> Europe/Amsterdam

Я взглянул на код blockhosts.py, где дата обрабатывается и проверяется, и я увидел, что он обрабатывается как time objects.

Следующий код показывает проблему:

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<br> -rw-r--r-- 1 root root 2917 2010-11-18 09:35 /etc/localtime<br> $ ls -l /usr/share/zoneinfo/Europe/Amsterdam<br> -rw-r--r-- 1 root root 2917 2010-11-11 09:35 /usr/share/zoneinfo/Europe/Amsterdam<br> $ diff /etc/localtime /usr/share/zoneinfo/Europe/Amsterdam

  • нет переменной среды TZ:

$ echo $TZ<br> $ env | grep TZ

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

2010-12-07 11:12:09 AMT<br> 2010-12-07 11:12:09 CET

1 Ответ

0 голосов
/ 06 декабря 2010

Модуль времени не делает больше, чем вызовы вызовов 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 () является значением по умолчанию для аргумента, поэтому то, как они различаются, мне не подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...