Question
Je voudrais savoir si un objet datetime particulier de python est plus ancien que X heures ou minutes. J'essaie de faire quelque chose de similaire à:
if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes
Ceci génère une erreur de type.
Quelle est la bonne façon de faire la comparaison date / heure en python? J'ai déjà consulté WorkingWithTime , qui est proche mais pas exactement ce que je veux. Je suppose que je veux juste que l’objet datetime soit représenté en secondes afin que je puisse faire une comparaison int normale.
Envoyez des listes des meilleures pratiques datetime.
La solution
Utilisez la classe datetime.timedelta ??code>:
>>> from datetime import datetime, timedelta
>>> then = datetime.now() - timedelta(hours = 2)
>>> now = datetime.now()
>>> (now - then) > timedelta(days = 1)
False
>>> (now - then) > timedelta(hours = 1)
True
Votre exemple pourrait s’écrire sous la forme suivante:
if (datetime.now() - self.timestamp) > timedelta(seconds = 100)
ou
if (datetime.now() - self.timestamp) > timedelta(minutes = 100)
Autres conseils
Comparez la différence avec un timedelta que vous créez:
if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
print 'older'
Alternative:
if (datetime.now() - self.timestamp).total_seconds() > 100:
En supposant que self.timestamp soit une instance de date / heure
Vous pouvez utiliser une combinaison des attributs "jours" et "secondes" de l'objet renvoyé pour trouver la réponse, comme ceci:
def seconds_difference(stamp1, stamp2):
delta = stamp1 - stamp2
return 24*60*60*delta.days + delta.seconds + delta.microseconds/1000000.
Utilisez abs () dans la réponse si vous souhaitez toujours un nombre de secondes positif.
Pour découvrir le nombre de secondes écoulées dans un horodatage, vous pouvez l'utiliser comme suit:
if seconds_difference(datetime.datetime.now(), timestamp) < 100:
pass
Vous pouvez soustraire deux objets datetime pour trouver la différence entre eux.
Vous pouvez utiliser datetime.fromtimestamp
pour analyser un horodatage POSIX.
Comme si:
# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
print "object is over 100 seconds old"