Je voudrais savoir si un objet python datetime particulier 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
Cela génère une erreur de type.
Quelle est la bonne façon de faire une comparaison date/heure en python? J'ai déjà regardé 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.
Veuillez publier des listes de bonnes pratiques datetime.
Utilisez le datetime.timedelta
classe:
>>> 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 être écrit comme suit:
if (datetime.now() - self.timestamp) > timedelta(seconds = 100)
ou
if (datetime.now() - self.timestamp) > timedelta(minutes = 100)
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 est une instance datetime
Vous pouvez utiliser une combinaison des attributs 'jours' et 'secondes' de l'objet retourné pour comprendre 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 voulez toujours un nombre positif de secondes.
Pour découvrir combien de secondes se sont écoulées depuis un horodatage, vous pouvez l'utiliser comme ceci:
if seconds_difference(datetime.datetime.now(), timestamp) < 100:
pass
Vous pouvez soustraire deux datetime objets pour trouver la différence entre eux.
Vous pouvez utiliser datetime.fromtimestamp
pour analyser un horodatage POSIX.
Ainsi:
# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
print "object is over 100 seconds old"