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 ?

3voto

Alon Gouldman Points 363

Vous pouvez utiliser le pendule :

import pendulum

t1 = pendulum.parse("10:33:26")
t2 = pendulum.parse("10:43:36")

period = t2 - t1

print(period.seconds)

produirait :

610

2voto

KittoMi Points 442
    import datetime

    day = int(input("day[1,2,3,..31]: "))
    month = int(input("Month[1,2,3,...12]: "))
    year = int(input("year[0~2020]: "))
    start_date = datetime.date(year, month, day)

    day = int(input("day[1,2,3,..31]: "))
    month = int(input("Month[1,2,3,...12]: "))
    year = int(input("year[0~2020]: "))
    end_date = datetime.date(year, month, day)

    time_difference = end_date - start_date
    age = time_difference.days
    print("Total days: " + str(age))

1voto

user2654744 Points 329

Concis si vous ne vous intéressez qu'au temps écoulé en dessous de 24 heures. Vous pouvez formater la sortie comme vous le souhaitez dans l'instruction return :

import datetime
def elapsed_interval(start,end):
    elapsed = end - start
    min,secs=divmod(elapsed.days * 86400 + elapsed.seconds, 60)
    hour, minutes = divmod(min, 60)
    return '%.2d:%.2d:%.2d' % (hour,minutes,secs)

if __name__ == '__main__':
    time_start=datetime.datetime.now()
    """ do your process """
    time_end=datetime.datetime.now()
    total_time=elapsed_interval(time_start,time_end)

1voto

questionto42 Points 1372

En général, vous avez plus d'un cas à traiter et il se peut qu'il se trouve dans un seul et même dossier. pd.DataFrame(data) format. Ensuite :

import pandas as pd

df['duration'] = pd.to_datetime(df['stop time']) - pd.to_datetime(df['start time'])

vous donne le décalage horaire sans aucune conversion manuelle.

Tiré de Convertir le type de colonne d'un DataFrame d'une chaîne à une date .

Si vous êtes paresseux et que les frais généraux des pandas ne vous dérangent pas, vous pouvez le faire même pour une seule entrée.

0voto

Shrey Points 1

Voici le code si la chaîne contient également des jours [-1 jour 32:43:02] :

print(
    (int(time.replace('-', '').split(' ')[0]) * 24) * 60 
    + (int(time.split(' ')[-1].split(':')[0]) * 60)
    + int(time.split(' ')[-1].split(':')[1])
)

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