Python: Zeiten vergleichen

Joerg66

Erfahrenes Mitglied
Hallo,
ich habe hier ein für euch wohl lächerliches Problem, aber ich bekomme es nicht gelöst.
Ich errechne mit:
zeitueberschritt = datetime.now() - datetime.strptime(evdataZeiten[z][0], '%Y-%m-%d %H:%M:%S')
den Unterschied zwischen aktueller Zeit und der Zeitangabe in einer Textdatei. Funktioniert.
In einer anderen Textdatei steht eine Zeitangabe wie:
00:09:10
also 9 Minuten, 10 sec., die Vorgabe.
Jetzt bräuchte ich einen Vergleich wie:
if zeitueberschritt > vorgabe:

Was ich aber nicht hinbekomme. Wie muß ich die Vorgabe von 0:9:10 behandeln, damit der Vergleich funktioniert?
Gruß Jörg
 
Auch wenn ich keine Ahnung von Python habe:
"00:09:10" ist keine "Zeitangabe", es ist eine ZeitDAUER, und dann noch eine TEXT-Repräsentation!
Eine Zeitangabe ist ein definierter ZeitPUNKT, so wie du die Differenz zwischen zwei Zeitpunkten berechnest, was wiederum eine ZeitDAUER ist

Du vergleichst wohl die Differenz (welche im Hintergrund ein Double sein dürfte) mit einem Text

Einfachste Lösung: Sowohl die Differenz, als auch "00:09:10" zu Sekunden umrechnen, und fertig.
Wohl am einfachsten per UNIX-Timestamp
 
Ich habe nur Grundkenntnisse in Python aber eine Suche nach "python time difference" lieferte sofort dies:
Calculate Time Difference in Python
Demnach ist dein "zeitueberschritt" ein Timedelta-Objekt und Du kannst durch total_seconds() die Sekunden ermitteln.
Aus der Vorgabe wie 00:09:10 ermittelst Du dann ebenfalls die Sekunden, indem Du den String an den Doppelpunkten mit "split" aufspaltest und die Bestandteile mit den richtige Faktoren aufaddierst.
Dann kannst Du prüfen, ob dein Zeitüberschritt größer ist als die Vorgabe.
 
Aus der Vorgabe wie 00:09:10 ermittelst Du dann ebenfalls die Sekunden, indem Du den String an den Doppelpunkten mit "split" aufspaltest und die Bestandteile mit den richtige Faktoren aufaddierst.
Dann kannst Du prüfen, ob dein Zeitüberschritt größer ist als die Vorgabe.
Anstatt mit Split, müsste das nicht auch mit fertigen Funktionen gehen?
sowas wie
Code:
t1=time.strptime('00:09:10', '%H:%M:%S')
If zeitueberschritt.total_seconds>t1.total_seconds Then

EDIT: Habs gefunden:
datetime — Basic date and time types
Code:
t1=time.strptime('00:09:10', '%H:%M:%S')
v = t1.second+t1.minute*60+t1.hour*3600
If zeitueberschritt.total_seconds>v Then
 
Zuletzt bearbeitet:
Vielen Dank für eure Antworten.
total_seconds wurde mir bei meiner Suche (mit deutschen Suchbegriffen) nirgens angezeigt.
print(zeitueberschritt) bringt das Ergebnis:
46 days, 2:51:01.061489

print(zeitueberschritt.total_seconds())
Bringt das Ergebnis in Sekunden, super!

v = t1.second+t1.minute*60+t1.hour*3600 bringt den Fehler:
AttributeError: 'time.struct_time' object has no attribute 'second'

Also muß ich das mit "split" machen. Ist ja nicht schlimm und ... peinlich das ich nicht drauf gekommen bin :) Gruß Jörg
 
Habs mal probiert.
AttributeError: 'module' object has no attribute 'fromisoformat'

egal. Der Bereich ist erledigt.
maxVorgabe=maxZeiten[s][2].split(":") maxVorgabeSek = int(maxVorgabe[0])*3600 + int(maxVorgabe[1])*60 + int(maxVorgabe[2])

tut was es soll und gut.
 

Neue Beiträge

Zurück