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 fois. J'ai parcouru la documentation pour Python et effectué des recherches en ligne et j'imagine que cela aurait quelque chose à voir avec les modules datetime et / ou time. Je n'arrive pas à le faire fonctionner correctement et je n'arrête pas de trouver comment le faire lorsqu'une date est impliquée.
En fin de compte, j'ai besoin de calculer les moyennes de plusieurs durées. J'ai fait fonctionner les décalages horaires et je les stocke dans une liste. Je dois maintenant calculer la moyenne. J'utilise des expressions régulières pour analyser les temps originaux et ensuite faire les différences.
Pour la moyenne, dois-je convertir en secondes puis en moyenne?
la source
Réponses:
Oui, c'est certainement
datetime
ce dont vous avez besoin ici. Plus précisément, lastrptime
fonction, qui analyse une chaîne dans un objet de temps.Cela vous donne un
timedelta
objet qui contient la différence entre les deux temps. Vous pouvez faire ce que vous voulez avec cela, par exemple le convertir en secondes ou l'ajouter à un autredatetime
.Cela renverra un résultat négatif si l'heure de fin est antérieure à l'heure de début, par exemple
s1 = 12:00:00
ets2 = 05:00:00
. Si vous voulez que le code suppose que l'intervalle traverse minuit dans ce cas (c'est-à-dire qu'il doit supposer que l'heure de fin n'est jamais antérieure à l'heure de début), vous pouvez ajouter les lignes suivantes au code ci-dessus:(bien sûr, vous devez inclure
from datetime import timedelta
quelque part). Merci à JF Sebastian d'avoir signalé ce cas d'utilisation.la source
days= -2
et plus dans l'objet tdelta.days
ne peut jamais être -2 ou moins sans qu'il y ait des informations supplémentaires (spécifiquement, des dates) au-delà de ce qui est décrit dans la question. Cette situation n'est donc pas pertinente ici.tdelta.total_seconds()
.Essayez ceci - c'est efficace pour chronométrer des événements à court terme. Si quelque chose prend plus d'une heure, l'affichage final voudra probablement un formatage convivial.
Le décalage horaire est renvoyé sous forme de nombre de secondes écoulées.
la source
time.monotonic()
en Python).time.time()
peut reculer (par exemple, lorsque l'heure sur la machine change, y compris les corrections NTP).Voici une solution qui prend en charge la recherche de la différence même si l'heure de fin est inférieure à l'heure de début (sur un intervalle de minuit) comme
23:55:00-00:25:00
(une durée d'une demi-heure):Production
time_diff()
renvoie un objet timedelta que vous pouvez passer (en tant que partie de la séquence) à unemean()
fonction directement, par exemple:Le
mean()
résultat est également untimedelta()
objet que vous pouvez convertir en secondes (td.total_seconds()
méthode (depuis Python 2.7)), heures (td / timedelta(hours=1)
(Python 3)), etc.la source
La structure qui représente le décalage horaire en Python est appelée timedelta . Si vous avez
start_time
et enend_time
tant quedatetime
types, vous pouvez calculer la différence en utilisant un-
opérateur comme:vous devriez le faire avant de convertir au format de chaîne particulière (par exemple, avant start_time.strftime (...)). Si vous avez déjà une représentation sous forme de chaîne, vous devez la reconvertir en time / datetime à l'aide de la méthode strptime .
la source
Ce site dit d'essayer:
Ce forum utilise time.mktime ()
la source
J'aime la façon dont ce gars le fait - https://amalgjose.com/2015/02/19/python-code-for-calculating-the-difference-between-two-time-stamps . Je ne sais pas si cela a des inconvénients.
Mais ça me va bien :)
En ce qui concerne la question, vous devez toujours utiliser
datetime.strptime()
comme d'autres l'ont dit plus tôt.la source
Essaye ça
PRODUCTION :
la source
résultat: 0 0 0 0-47-37
la source
Les deux
time
etdatetime
ont un composant de date.Normalement, si vous ne traitez que la partie horaire, vous fournirez une date par défaut. Si vous êtes simplement intéressé par la différence et que vous savez que les deux heures sont le même jour, construisez un
datetime
pour chacune avec le jour défini sur aujourd'hui et soustrayez le début de l'heure de fin pour obtenir l'intervalle (timedelta
).la source
Jetez un œ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.
la source
Concis si vous êtes simplement intéressé par le temps écoulé qui est inférieur à 24 heures. Vous pouvez formater la sortie selon vos besoins dans l'instruction return:
la source