Ich habe zwei Mal eine Start- und eine Stoppzeit im Format 10:33:26 (HH: MM: SS). Ich brauche den Unterschied zwischen den beiden Zeiten. Ich habe die Dokumentation nach Python durchgesehen und online gesucht, und ich würde mir vorstellen, dass dies etwas mit den Datums- und / oder Zeitmodulen zu tun hat. Ich kann es nicht richtig zum Laufen bringen und finde immer wieder heraus, wie das geht, wenn es um ein Datum geht.
Letztendlich muss ich die Durchschnittswerte mehrerer Zeitdauern berechnen. Ich habe die Zeitunterschiede zum Arbeiten 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 Mittelwertbildung in Sekunden konvertieren und dann mitteln?
quelle
Antworten:
Ja, definitiv
datetime
ist das, was Sie hier brauchen. Insbesondere diestrptime
Funktion, die eine Zeichenfolge in ein Zeitobjekt analysiert.Dadurch erhalten Sie ein
timedelta
Objekt, das den Unterschied zwischen den beiden Zeiten enthält. Damit können Sie tun, was Sie wollen, z. B. in Sekunden konvertieren oder zu einem anderen hinzufügendatetime
.Dies gibt ein negatives Ergebnis zurück, wenn die Endzeit früher als die Startzeit ist, z. B.
s1 = 12:00:00
unds2 = 05:00:00
. Wenn der Code in diesem Fall davon ausgehen soll, dass das Intervall Mitternacht überschreitet (dh angenommen wird, dass die Endzeit niemals vor der Startzeit liegt), können Sie dem obigen Code die folgenden Zeilen hinzufügen:(Natürlich müssen Sie
from datetime import timedelta
irgendwo einschließen ). Vielen Dank an JF Sebastian für den Hinweis auf diesen Anwendungsfall.quelle
days= -2
und darüber im tdelta-Objekt.days
kann aber niemals -2 oder weniger sein, ohne dass zusätzliche Informationen (insbesondere Daten) vorliegen, die über die in der Frage beschriebenen hinausgehen. Diese Situation ist hier also nicht relevant.tdelta.total_seconds()
.Versuchen Sie dies - es ist effizient, um kurzfristige Ereignisse zu planen. Wenn etwas länger als eine Stunde dauert, wird die endgültige Anzeige wahrscheinlich eine freundliche Formatierung erfordern.
Die Zeitdifferenz wird als Anzahl der verstrichenen Sekunden zurückgegeben.
quelle
time.monotonic()
in Python).time.time()
kann rückwärts gehen (z. B. wenn sich die Zeit auf dem Computer ändert, einschließlich NTP-Korrekturen).Hier ist eine Lösung, die das Ermitteln des Unterschieds unterstützt, selbst wenn die Endzeit kürzer als die Startzeit (über Mitternachtsintervall) ist, z. B.
23:55:00-00:25:00
(eine halbe Stunde Dauer):Ausgabe
time_diff()
Gibt ein Timedelta-Objekt zurück, das Sie (als Teil der Sequenz)mean()
direkt an eine Funktion übergeben können, z.Das
mean()
Ergebnis ist auch eintimedelta()
Objekt, das Sie in Sekunden (td.total_seconds()
Methode (seit Python 2.7)), Stunden (td / timedelta(hours=1)
(Python 3)) usw. konvertieren können .quelle
Eine Struktur, die den Zeitunterschied in Python darstellt, wird als Zeitdelta bezeichnet . Wenn Sie
start_time
undend_time
alsdatetime
Typen haben, können Sie die Differenz mit folgenden-
Operatoren berechnen :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 diese mithilfe der strptime- Methode zurück in time / datetime konvertieren .
quelle
Diese Seite sagt zu versuchen:
Dieses Forum verwendet time.mktime ()
quelle
Mir gefällt, wie dieser Typ das macht - https://amalgjose.com/2015/02/19/python-code-for-calculating-the-difference-between-two-time-stamps . Ich bin mir nicht sicher, ob es Nachteile hat.
Sieht aber ordentlich aus für mich :)
In Bezug auf die Frage müssen Sie noch verwenden,
datetime.strptime()
wie andere zuvor gesagt haben.quelle
Versuche dies
AUSGABE :
quelle
Ergebnis: 0 0 0 0 -47 -37
quelle
Beide
time
unddatetime
haben eine Datumskomponente.Wenn Sie sich nur mit dem Zeitteil befassen, geben Sie normalerweise ein Standarddatum an. Wenn Sie nur an dem Unterschied interessiert sind und wissen, dass beide Zeiten am selben Tag liegen, konstruieren Sie
datetime
für jeden einen Tag mit dem heutigen Tag und subtrahieren Sie den Start von der Stoppzeit, um das Intervall (timedelta
) zu erhalten.quelle
Schauen Sie sich das datetime-Modul und die timedelta-Objekte an. Am Ende sollten Sie ein Datum / Uhrzeit-Objekt für die Start- und Stoppzeiten erstellen. Wenn Sie diese subtrahieren, erhalten Sie ein Zeitdelta.
quelle
Kurz gesagt, wenn Sie nur an der verstrichenen Zeit interessiert sind, die unter 24 Stunden liegt. Sie können die Ausgabe nach Bedarf in der return-Anweisung formatieren:
quelle