2010-12-06 5 views
1

J'ai utilisé blockhosts depuis un certain temps maintenant, et ça a été génial jusqu'ici. J'ai récemment mis à jour Ubuntu à 10.10, et j'ai commencé à voir un comportement erratique. Lors d'un examen plus approfondi, j'ai remarqué un tas d'erreurs dans /var/log/blockhosts.log:Problème avec le fuseau horaire avec time.strftime

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'

Le fait du fuseau horaire apparaissant comme « AMT » (heure arménienne) est étrange. Mon fuseau horaire est défini comme:

$ cat /etc/timezone
Europe/Amsterdam

J'ai pris un coup d'oeil au code de blockhosts.py où la date est gérée et contrôlée, et je l'ai vu est traitée comme time objets.

Le code suivant montre le problème:

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 

La sortie est la suivante:

2010-12-06 16:18:47 AMT 
2010-12-06 16:18:47 CET 

La valeur de time.tzname est ('CET', 'CEST'), donc je ne suis pas sûr où le "AMT" est venant de ...

Toute aide sera appréciée!

Mises à jour:

Des suggestions dans les commentaires:

  • /etc/localtime n'est pas un lien symbolique vers /usr/share/zoneinfo/Europe/Amsterdam, mais ils sont le même fichier:

$ 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

  • il n'y a pas la variable d'environnement TZ:

$ echo $TZ
$ env | grep TZ

  • Je me suis connecté en tant qu'autre utilisateur et exécuter le script avec le même résultat:

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

+0

J'adore python, mais datetime sux bigtime. –

+0

Cela ressemble à un bug possible. Configurez un nouveau compte d'utilisateur sur votre ordinateur et voyez si vous pouvez le répliquer ici. Si oui, essayez de déposer un bug: https://bugs.launchpad.net/ubuntu/+source/python-defaults/+bugs –

+1

/etc/timezone normalement n'est pas l'endroit où vous définissez votre fuseau horaire./etc/localtime doit être un lien symbolique vers le fuseau horaire correct dans/usr/share/zoneinfo/Europe/Amsterdam - c'est la première étape. La deuxième étape consiste à s'assurer qu'il est correctement récupéré.Vous pouvez vérifier cela avec 'date' (ancienne commande unix normale), vérifiez également que vous n'avez pas une variable d'environnement nommée TZ qui a quelque chose de différent de ce que vous essayez d'utiliser. Vous devez vous déconnecter et vous reconnecter pour vous assurer que/etc/timezone est récupéré correctement par locale/votre shell. Ensuite, essayez votre code python. – synthesizerpatel

Répondre

0

Le temps Le module ne fait pas beaucoup plus que d'appeler les appels API Unix C, donc je suspecterais d'abord votre configuration. Cela dit, time.strftime('%Y-%m-%d %H:%M:%S %Z', time.localtime()) et time.strftime('%Y-%m-%d %H:%M:%S %Z') devraient être équivalents, comme time.localtime() est la valeur par défaut pour l'argument, donc comment ceux-ci sont différents est au-delà de moi.

+0

Je suis d'accord avec vous ici, c'est l'une des choses que j'ai réalisé. Je ne trouve pas de défaut dans la configuration, comme je l'ai ajouté aux modifications ci-dessus. D'autres indices? – englebip

+0

Non, c'est normal. Étrange. Je penche maintenant pour que ce soit un bug vraiment, vraiment, vraiment étrange, peut-être même dans libc. :) Signaler cela pourrait aider, mais il y a un lot de bugs alors ne retenez pas votre souffle. –