Le module datetime
est certainement plus facile à utiliser, mais si vous insistez, vous pouvez le faire avec le module de la place time
. À savoir:
>>> import time
>>> fmt = '%a %b %d %H:%M:%S +0000 %Y'
>>> time.strftime(fmt)
'Thu Oct 15 07:54:07 +0000 2009'
>>> createdat = 'Thu Oct 15 02:30:30 +0000 2009'
>>> createdtim = time.strptime(createdat, fmt)
>>> hoursago = (time.time() - time.mktime(createdtim))/3600
>>> print hoursago
5.42057559947
Une raison pour laquelle le module time
est tellement agaçant à utiliser est qu'il utilise deux méthodes différentes pour représenter le temps - on est un 9-tuple (et c'est ce que vous obtenez de strptime
), et celui-ci est un flottement "secondes depuis l'époque" (et c'est ce que vous devez faire les différences); la fonction mktime
traduit le premier à ce dernier. La différence en heures est clairement 1/3600 de la différence en secondes - vous devrez décider comment afficher un "nombre d'heures" typiquement-fractionnaires, bien sûr (heure et fraction avec quelques chiffres, ou, arrondir au plus proche nombre entier d'heures, ou quoi d'autre). Le littéral '+0000' dans votre format, pour strptime
, signifie que vous attendez et ignorez les caractères littéraux à cet endroit dans votre chaîne "createdat" (normalement vous auriez un spécificateur de décalage de fuseau horaire là). Si c'est vraiment ce que vous voulez, alors vous avez la bonne chaîne de format!
Ce doit être l'une des questions les plus fréquentes sur SO. –
J'apprécierais d'être pointé vers un exemple où il a déjà été répondu dans ce cas – chrism
Je pense que l'indice était que vous pourriez chercher (en haut de la page) pour des questions similaires précédentes et voir leurs réponses. – pavium