242 votes

Comment calculer l'intervalle de temps entre deux chaînes de temps ?

J'ai deux heures, une heure de début et une heure de fin, au format 10:33:26 (HH:MM:SS). J'ai besoin de la différence entre les deux heures. J'ai consulté la documentation de Python et j'ai fait des recherches en ligne, et j'imagine que cela a quelque chose à voir avec les modules datetime et/ou time. Je n'arrive pas à le faire fonctionner correctement et je continue à trouver seulement comment faire cela quand une date est impliquée.

En fin de compte, je dois calculer les moyennes de plusieurs durées. J'ai réussi à faire fonctionner les différences de temps et je les stocke dans une liste. Je dois maintenant calculer la moyenne. J'utilise des expressions régulières pour analyser les durées initiales, puis les différences.

Pour le calcul de la moyenne, dois-je convertir en secondes puis calculer la moyenne ?

13voto

antonavy Points 430

J'aime la façon dont ce type le fait - https://amalgjose.com/2015/02/19/python-code-for-calculating-the-difference-between-two-time-stamps . Il n'est pas certain qu'il y ait des inconvénients.

Mais pour moi, ça a l'air bien fait :)

from datetime import datetime
from dateutil.relativedelta import relativedelta

t_a = datetime.now()
t_b = datetime.now()

def diff(t_a, t_b):
    t_diff = relativedelta(t_b, t_a)  # later/end time comes first!
    return '{h}h {m}m {s}s'.format(h=t_diff.hours, m=t_diff.minutes, s=t_diff.seconds)

En ce qui concerne la question, vous devez toujours utiliser datetime.strptime() comme d'autres l'ont dit précédemment.

8voto

Dipnesh Parakhiya Points 163

Essayez ceci

import datetime
import time
start_time = datetime.datetime.now().time().strftime('%H:%M:%S')
time.sleep(5)
end_time = datetime.datetime.now().time().strftime('%H:%M:%S')
total_time=(datetime.datetime.strptime(end_time,'%H:%M:%S') - datetime.datetime.strptime(start_time,'%H:%M:%S'))
print total_time

SORTIE :

0:00:05

7voto

hu wentao Points 71
import datetime as dt
from dateutil.relativedelta import relativedelta

start = "09:35:23"
end = "10:23:00"
start_dt = dt.datetime.strptime(start, "%H:%M:%S")
end_dt = dt.datetime.strptime(end, "%H:%M:%S")
timedelta_obj = relativedelta(start_dt, end_dt)
print(
    timedelta_obj.years,
    timedelta_obj.months,
    timedelta_obj.days,
    timedelta_obj.hours,
    timedelta_obj.minutes,
    timedelta_obj.seconds,
)

résultat : 0 0 0 0 -47 -37

3voto

ChrisF Points 74295

Les deux time y datetime ont une composante "date".

Normalement, si vous ne vous occupez que de la partie temporelle, vous devez fournir une date par défaut. Si vous n'êtes intéressé que par la différence et que vous savez que les deux heures se situent le même jour, vous pouvez construire une fonction datetime pour chacun d'entre eux, le jour étant fixé à aujourd'hui, et soustraire l'heure de début de l'heure de fin pour obtenir l'intervalle ( timedelta ).

3voto

Pierce Points 246

Jetez un coup d'œil au module datetime et aux objets timedelta. Vous devriez finir par construire un objet datetime pour les heures de début et de fin, et lorsque vous les soustrayez, vous obtenez un timedelta.

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