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.

Était-ce utile?

La solution

Utilisez la classe datetime.timedelta :

>>> 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"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top