482 votes

Comment trouver la différence de temps entre deux objets datetime en python ?

Comment dire la différence de temps en minutes entre deux datetime des objets ?

0 votes

Il existe de nombreuses significations des différences de date (temps réel, horloge murale, etc.). Votre question doit donc être plus détaillée.

473voto

SilentGhost Points 79627
>>> import datetime
>>> first_time = datetime.datetime.now()
>>> later_time = datetime.datetime.now()
>>> difference = later_time - first_time
datetime.timedelta(0, 8, 562000)
>>> seconds_in_day = 24 * 60 * 60
>>> divmod(difference.days * seconds_in_day + difference.seconds, 60)
(0, 8)      # 0 minutes, 8 seconds

Soustraire le temps ultérieur du premier temps. difference = later_time - first_time crée un objet datetime qui ne contient que la différence. Dans l'exemple ci-dessus, la différence est de 0 minute, 8 secondes et 562000 microsecondes.

3 votes

Référence : docs.python.org/library/datetime.html#datetime-objects . Lire "opérations soutenues".

0 votes

@SilentGhost, Comment faire avec les heures, les minutes et les secondes.

1 votes

@markcial : delorean déforme le site datetime , pytz approche, par exemple, l'exemple de code de démarrage pourrait s'écrire comme suit d = datetime.now(timezone(EST)) (une ligne lisible au lieu de cinq).

167voto

Ryan Stanley Points 371

La nouveauté de Python 2.7 est la fonction timedelta méthode d'instance .total_seconds() . D'après la documentation de Python, ceci est équivalent à (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6 .

Référence : http://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds

>>> import datetime
>>> time1 = datetime.datetime.now()
>>> time2 = datetime.datetime.now() # waited a few minutes before pressing enter
>>> elapsedTime = time2 - time1
>>> elapsedTime
datetime.timedelta(0, 125, 749430)
>>> divmod(elapsedTime.total_seconds(), 60)
(2.0, 5.749430000000004) # divmod returns quotient and remainder
# 2 minutes, 5.74943 seconds

37voto

Vinay Sajip Points 41286

Il suffit de soustraire l'un de l'autre. Vous obtenez un timedelta objet avec la différence.

>>> import datetime
>>> d1 = datetime.datetime.now()
>>> d2 = datetime.datetime.now() # after a 5-second or so pause
>>> d2 - d1
datetime.timedelta(0, 5, 203000)

Vous pouvez convertir dd.days , dd.seconds et dd.microseconds à des minutes.

2 votes

Quels sont ces paramètres ? Des commentaires seraient les bienvenus

3 votes

@TheRealChx101 >>> dd = d2 - d1

1 votes

Attention : dd.seconds ne signifie pas le nombre de secondes entre les deux dates. Utilisez plutôt dd.total_seconds(). La dernière ligne devrait donc être print (int(round(dd.total_seconds()/60, 0)))

19voto

tgwaste Points 11

Utilisez divmod :

now = int(time.time()) # epoch seconds
then = now - 90000 # some time in the past

d = divmod(now-then,86400)  # days
h = divmod(d[1],3600)  # hours
m = divmod(h[1],60)  # minutes
s = m[1]  # seconds

print '%d days, %d hours, %d minutes, %d seconds' % (d[0],h[0],m[0],s)

3 votes

Cela devrait être mis dans le module datetime. Je n'arrive pas à comprendre pourquoi il n'utilise que les jours, les secondes et les millis...

0 votes

Cela ne répond pas à la question concernant les objets de type datetime.

12voto

Tony Points 871

Voici comment j'obtiens le nombre d'heures qui se sont écoulées entre deux objets datetime.datetime :

before = datetime.datetime.now()
after  = datetime.datetime.now()
hours  = math.floor(((after - before).seconds) / 3600)

9 votes

Ça ne marchera pas tout à fait : timedelta.seconds ne donne que le nombre de secondes explicitement stocké - dont la documentation garantit qu'elle sera inférieure à un jour. Vous voulez (after - before).total_seconds() qui donne le nombre de secondes qui s'étendent sur le tout le site delta.

1 votes

(after - before).total_seconds() // 3600 (Python 2.7) ou (after - before) // timedelta(seconds=3600) (Python 3)

0 votes

@lvc Mon ancien code était en fait écrit de cette façon, et je pensais être intelligent et le "réparer". Merci pour la correction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X