web-dev-qa-db-fra.com

Comment vérifier la différence, en secondes, entre deux dates?

Il doit y avoir un moyen plus facile de faire cela. J'ai des objets qui veulent être rafraîchis de temps en temps, alors je veux enregistrer quand ils ont été créés, vérifier par rapport à l'horodatage actuel et actualiser si nécessaire.

datetime.datetime s'est avéré difficile et je ne veux pas plonger dans la bibliothèque ctime. Y a-t-il quelque chose de plus facile pour ce genre de chose?

147
Alex

si vous voulez calculer les différences entre deux dates connues, utilisez total_seconds comme ceci:

import datetime as dt

a = dt.datetime(2013,12,30,23,59,59)
b = dt.datetime(2013,12,31,23,59,59)

(b-a).total_seconds()

86400.0

#note that seconds doesn't give you what you want:
(b-a).seconds

428
Rich Signell
import time  
current = time.time()

...job...
end = time.time()
diff = end - current

cela marcherait-il pour toi?

29
matcheek
>>> from datetime import datetime

>>>  a = datetime.now()

# wait a bit 
>>> b = datetime.now()

>>> d = b - a # yields a timedelta object
>>> d.seconds
7

(7 sera le temps que vous avez attendu un peu plus haut)

Je trouve que datetime.datetime est assez utile. Par conséquent, si vous rencontrez un scénario compliqué ou inconfortable, veuillez nous en informer.

EDIT: Merci à @WoLpH d’avoir fait remarquer qu’on ne cherche pas toujours à actualiser si fréquemment que les dates/heures seront rapprochées. En comptabilisant les jours dans le delta, vous pouvez gérer les écarts plus longs d’horodatage:

>>> a = datetime(2010, 12, 5)
>>> b = datetime(2010, 12, 7)
>>> d = b - a
>>> d.seconds
0
>>> d.days
2
>>> d.seconds + d.days * 86400
172800
14
Jarret Hardie

Nous avons la fonction total_seconds () avec Python 2.7. Veuillez consulter le code ci-dessous pour python 2.6.

import datetime
import time  

def diffdates(d1, d2):
    #Date format: %Y-%m-%d %H:%M:%S
    return (time.mktime(time.strptime(d2,"%Y-%m-%d %H:%M:%S")) -
               time.mktime(time.strptime(d1, "%Y-%m-%d %H:%M:%S")))

d1 = datetime.now()
d2 = datetime.now() + timedelta(days=1)
diff = diffdates(d1, d2)
12
Prashant Gaur

Voici celui qui fonctionne pour moi.

from datetime import datetime

date_format = "%H:%M:%S"

# You could also pass datetime.time object in this part and convert it to string.
time_start = str('09:00:00') 
time_end = str('18:00:00')

# Then get the difference here.    
diff = datetime.strptime(time_end, date_format) - datetime.strptime(time_start, date_format)

# Get the time in hours i.e. 9.60, 8.5
result = diff.seconds / 3600;

J'espère que cela t'aides!

0
therealadrain