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
J'adore python, mais datetime sux bigtime. –
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 –
/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