web-dev-qa-db-fra.com

Python Comparaisons de dates

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.

62
Ryan White

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)
110
John Millikin

Comparez la différence avec un timedelta que vous créez:

if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
    print 'older'
5
William

Alternative:

if (datetime.now() - self.timestamp).total_seconds() > 100:

En supposant que self.timestamp est une instance datetime

5
Chong Ying Fan

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
1
Jerub

Vous pouvez soustraire deux datetime objets pour trouver la différence entre eux.
Vous pouvez utiliser datetime.fromtimestamp pour analyser un horodatage POSIX.

0
William Keller

Ainsi:

# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
    print "object is over 100 seconds old"
0
Jeremy Cantrell