So berechnen Sie das Zeitintervall zwischen zwei Zeitzeichenfolgen

Lesezeit: 7 Minuten

Benutzer-Avatar
Hannah

Ich habe zwei Zeiten, eine Start- und eine Stoppzeit, im Format 10:33:26 (HH:MM:SS). Ich brauche die Differenz zwischen den beiden Zeiten. Ich habe die Dokumentation für Python durchgesehen und online gesucht, und ich könnte mir vorstellen, dass es etwas mit den datetime- und/oder time-Modulen zu tun hat. Ich kann es nicht richtig zum Laufen bringen und finde immer nur, wie das geht, wenn es um ein Date geht.

Letztendlich muss ich die Durchschnittswerte mehrerer Zeitdauern berechnen. Ich habe die Zeitunterschiede zum Laufen gebracht und speichere sie in einer Liste. Ich muss jetzt den Durchschnitt berechnen. Ich verwende reguläre Ausdrücke, um die ursprünglichen Zeiten zu analysieren und dann die Unterschiede zu machen.

Soll ich für die Mittelung in Sekunden umwandeln und dann mitteln?

  • Können Sie Ihren Code posten, den Sie ausprobiert haben, und wir können von dort aus beginnen?

    – Anthony Forloney

    22. Juni 2010 um 20:40 Uhr

  • verwandt: Finden Sie heraus, ob zwischen Datumsangaben 24 Stunden vergangen sind – Python

    – jfs

    18. Februar 2018 um 9:20 Uhr

Benutzer-Avatar
David z

Ja auf jeden Fall datetime ist das, was Sie hier brauchen. Insbesondere die datetime.strptime() Methode, die eine Zeichenfolge in eine analysiert datetime Objekt.

from datetime import datetime
s1 = '10:33:26'
s2 = '11:15:49' # for example
FMT = '%H:%M:%S'
tdelta = datetime.strptime(s2, FMT) - datetime.strptime(s1, FMT)

Das bringt dir ein timedelta Objekt, das die Differenz zwischen den beiden Zeiten enthält. Damit kannst du machen was du willst, z Umrechnung in Sekunden oder es zu einem anderen hinzufügen datetime.

Dies gibt beispielsweise ein negatives Ergebnis zurück, wenn die Endzeit vor der Startzeit liegt s1 = 12:00:00 und s2 = 05:00:00. Wenn Sie möchten, dass der Code in diesem Fall davon ausgeht, dass das Intervall Mitternacht überschreitet (dh er sollte davon ausgehen, dass die Endzeit nie vor der Startzeit liegt), können Sie dem obigen Code die folgenden Zeilen hinzufügen:

if tdelta.days < 0:
    tdelta = timedelta(
        days=0,
        seconds=tdelta.seconds,
        microseconds=tdelta.microseconds
    )

(Natürlich müssen Sie hinzufügen from datetime import timedelta irgendwo). Danke an JF Sebastian für den Hinweis auf diesen Anwendungsfall.

  • Negativer Zeit-Hack wird nicht funktionieren, wenn days= -2 und oben im tdelta-Objekt.

    – CKM

    9. Februar 2017 um 6:30 Uhr

  • @chandresh Ja, aber days kann niemals -2 oder weniger sein, ohne dass zusätzliche Informationen (insbesondere Daten) über das hinausgehen, was in der Frage beschrieben wird. Diese Situation ist hier also nicht relevant.

    – David Z

    9. Februar 2017 um 6:31 Uhr


  • Hinweis: Um das Zeitdelta in Sekunden zu erhalten, müssen Sie anrufen tdelta.total_seconds().

    – scai

    10. Dezember 2018 um 15:39 Uhr

  • datetime.strptime gibt a zurück datetime Objekt (kein time Objekt), in Python 3.9 docs.python.org/3/library/…

    – Ran Feldesh

    15. März 2021 um 22:33 Uhr


  • Ich erinnere mich nicht genau, aber ich habe das Gefühl, ich meinte “Zeitobjekt” im Sinne von “ein Objekt, das die Zeit darstellt”, nicht “ein Typobjekt”. time“. Deshalb ist es nicht Code-formatiert. Trotzdem könnte es nicht schaden, es zu klären; ich werde es in Kürze bearbeiten.

    – David Z

    15. März 2021 um 22:39 Uhr

Benutzer-Avatar
Bill Grava

Probieren Sie dies aus – es ist effizient für das Timing kurzfristiger Ereignisse. Wenn etwas länger als eine Stunde dauert, wird die endgültige Anzeige wahrscheinlich eine freundliche Formatierung erfordern.

import time
start = time.time()

time.sleep(10)  # or do something more productive

done = time.time()
elapsed = done - start
print(elapsed)

Die Zeitdifferenz wird als Anzahl der verstrichenen Sekunden zurückgegeben.

  • Warum war dies nicht die akzeptierte Antwort? Es ist einfach, es gibt einen Wert, der mit etwas verglichen werden kann (hat die Ausführung meines Befehls mehr als 2,5 Sekunden gedauert?) und es funktioniert in v2.7

    – Mawg sagt, Monica wieder einzusetzen

    5. Juli 2016 um 10:09 Uhr

  • @Mawg Weil es die OP-Frage nicht beantwortet. Er fragte, wie er zwei verschiedene Zeiten vergleichen kann, die er bereits in einem bestimmten Format hat, und nicht, wie er sie durch Timing eines Ereignisses in seinem Code generieren kann. Das sind ziemlich unterschiedliche Probleme.

    – Natsukane

    14. Januar 2017 um 15:48 Uhr

  • Sie sollten dies nicht verwenden; Verwenden Sie stattdessen die monotone Zeit (time.monotonic() in Python). time.time() kann rückwärts gehen (z. B. wenn sich die Uhrzeit auf der Maschine ändert, einschließlich NTP-Korrekturen).

    – nemequ

    14. November 2017 um 19:54 Uhr

  • Für die Frage irrelevant

    – Patricktokeeffe

    13. Dezember 2017 um 21:13 Uhr

Hier ist eine Lösung, die das Finden des Unterschieds unterstützt, selbst wenn die Endzeit kleiner als die Startzeit ist (über dem Mitternachtsintervall), wie z 23:55:00-00:25:00 (eine halbe Stunde Dauer):

#!/usr/bin/env python
from datetime import datetime, time as datetime_time, timedelta

def time_diff(start, end):
    if isinstance(start, datetime_time): # convert to datetime
        assert isinstance(end, datetime_time)
        start, end = [datetime.combine(datetime.min, t) for t in [start, end]]
    if start <= end: # e.g., 10:33:26-11:15:49
        return end - start
    else: # end < start e.g., 23:55:00-00:25:00
        end += timedelta(1) # +day
        assert end > start
        return end - start

for time_range in ['10:33:26-11:15:49', '23:55:00-00:25:00']:
    s, e = [datetime.strptime(t, '%H:%M:%S') for t in time_range.split('-')]
    print(time_diff(s, e))
    assert time_diff(s, e) == time_diff(s.time(), e.time())

Ausgabe

0:42:23
0:30:00

time_diff() gibt ein timedelta-Objekt zurück, das Sie (als Teil der Sequenz) an a übergeben können mean() Funktion direkt zB:

#!/usr/bin/env python
from datetime import timedelta

def mean(data, start=timedelta(0)):
    """Find arithmetic average."""
    return sum(data, start) / len(data)

data = [timedelta(minutes=42, seconds=23), # 0:42:23
        timedelta(minutes=30)] # 0:30:00
print(repr(mean(data)))
# -> datetime.timedelta(0, 2171, 500000) # days, seconds, microseconds

Das mean() Ergebnis ist auch timedelta() Objekt, das Sie in Sekunden umwandeln können (td.total_seconds() Methode (seit Python 2.7)), Stunden (td / timedelta(hours=1) (Python 3)) usw.

  • @JF Ich frage mich, ob statistische Mittelwert- und Varianzfunktionen jetzt direkt mit dem timedelta-Objekt funktionieren? Irgendwelche Gedanken dazu? Außerdem ist jede Hilfe zur Berechnung der Varianz von Zeitdelta-Objekten hilfreich.

    – CKM

    9. Februar 2017 um 10:04 Uhr


  • @chandresh: es wird nicht unterstützt. Sie könnten in Sekunden/Mikrosekunden umwandeln, um mathematische Statistiken von Zeitdeltas zu berechnen.

    – jfs

    9. Februar 2017 um 15:02 Uhr

  • Das ist großartig, aber wenn Sie den Zeitunterschied zwischen 13 und 12 erhalten möchten, sind es 23 Stunden, was in meinem Fall nicht der Fall ist. In meinem Fall sollte es 1 Stunde sein. Eine einfache Möglichkeit, dies zu lösen, besteht darin, die Minute zu erhalten, während Start und Ende umgedreht werden. “` min( time_diff(time1, time2), time_diff(time2, time1) ) “`

    – Ysrninja

    17. März um 14:13 Uhr

  • @Ysrninja: wenn start=13 und end=12 dann 23 Stunden erwartet (start ist früher als end). Bekommen 1 Stunde: abs(dt1 - dt2)

    – jfs

    17. März um 14:41 Uhr

Benutzer-Avatar
Kyra

Dies Seite sagt zu versuchen:

import datetime as dt
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')
diff = (end_dt - start_dt) 
diff.seconds/60 

Dieses Forum verwendet time.mktime()

Benutzer-Avatar
dzida

Eine Struktur, die den Zeitunterschied in Python darstellt, wird aufgerufen Zeitdelta. Wenn Sie haben start_time und end_time wie datetime Typen, mit denen Sie die Differenz berechnen können - Operator wie:

diff = end_time - start_time

Sie sollten dies tun, bevor Sie in ein bestimmtes Zeichenfolgenformat konvertieren (z. B. vor start_time.strftime(…)). Falls Sie bereits eine Zeichenfolgendarstellung haben, müssen Sie sie mit zurück in Zeit/Datum/Uhrzeit konvertieren strptime Methode.

Benutzer-Avatar
Gemeinschaft

Ich mag, wie dieser Typ es macht – https://amalgjose.com/2015/02/19/python-code-for-calculating-the-difference-between-two-time-stamps. Ich bin mir nicht sicher, ob es einige Nachteile hat.

Aber sieht für mich schick aus 🙂

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)

In Bezug auf die Frage, die Sie noch verwenden müssen datetime.strptime() wie andere schon sagten.

Benutzer-Avatar
Dipnesh Parakhiya

Versuche dies

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

AUSGANG :

0:00:05

1047310cookie-checkSo berechnen Sie das Zeitintervall zwischen zwei Zeitzeichenfolgen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy