zwei Uhrzeiten subtrahieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
chris74
User
Beiträge: 5
Registriert: Dienstag 2. Januar 2018, 20:46

Hallo zusammen,

Ich möchte zwei Uhrzeiten subtrahieren siehe code unten dabei bekomme ich immer folgende Fehlermeldung:
TypeError:unsupported operand type for -: datetime.time and datetime.time

Ich programmiere noch nicht lange python und habe keine Idee wie ich das problem lösen kann.
Kann mir jemand sagen was ich für ein Fehler mache und wie es funktioniert.
Danke im Voraus für eure Antworten

[import datetime
if Zeitmessung == 0:
start_time = datetime.datetime.time(datetime.datetime.utcnow())
print (start_time)
Zeitmessung = 1

if laps == 0 and Zeitmessung == 1:
end_time = datetime.datetime.time(datetime.datetime.utcnow())
print (end_time)
Zeitmessung = 0
div_time =(end_time) - (start_time)
print(div_time)]
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Unterscheidung ist subtil, aber du musst datetime.datetime nehmen. Nur das sind Zeitpunkte. Zwei Tageszeiten (time) mag er nicht subtrahieren, weil man sich da alle 24h wiederholt.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@chris74: ... und Differenz schreibt man mit f und nicht mit v. Statt einer zusätzlichen Variable, würde ich start_time auf None prüfen, falls der erste Zeitpunkt noch nicht ermittelt wurde:

Code: Alles auswählen

import datetime
start_time = None

[...]

if start_time is None:
    start_time = datetime.datetime.utcnow()
    print(start_time)
elif laps == 0:
    end_time = datetime.datetime.utcnow()
    print(end_time)
    difference_time =end_time - start_time
    print(difference_time)
    start_time = None
chris74
User
Beiträge: 5
Registriert: Dienstag 2. Januar 2018, 20:46

Hallo Sirius3,
Hallo __deets__,

erstmal Danke für eure infos zu meinem Problem, aber nun bekomme ich folgende Fehlermeldung:
an integer is required (for type datetime.datetime)

Habt ihr noch einen Tipp ?
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

zeig bitten den konkreten Code.
chris74
User
Beiträge: 5
Registriert: Dienstag 2. Januar 2018, 20:46

Hallo,
so funktioniert es nicht:
start_time = datetime.datetime(datetime.datetime.utcnow())
so geht es
start_time = datetime.datetime.utcnow()

Mir ist zwar der Unterschied nicht ganz klar, aber es geht ja jetzt.

Danke für eure Hilfe.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

utcnow() liefert dir schon ein fertiges datetime objekt, das nochmal in einen Konstruktor zu stopfen ist sinnlos.
chris74
User
Beiträge: 5
Registriert: Dienstag 2. Januar 2018, 20:46

Hallo,

gibt es jetzt noch die Möglichkeit nur die Zeit anzuzeigen ?

Danke für eure Infos.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du mal in die Dokumentation des datetime Moduls geschaut? Das beantwortet diese und viele andere Fragen.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@chris74: man kann mit Stringformatierung genau angeben, was man wie ausgeben will.
chris74
User
Beiträge: 5
Registriert: Dienstag 2. Januar 2018, 20:46

Hallo zusammen,
Ich habe die Doku von dem datetime Modul gelesen aber keine funktionierende Lösung gefunden.
wenn ich z.B. folgendes teste

start_time = datetime.datetime.utcnow()
end_time = datetime.datetime.utcnow()
div_time =(end_time) - (start_time)
d_time = div_time.strftime('%H:%M:%S')
print(d_time)

bekomme ich folgende Fehlermeldung: datetime.timedelta object has no attribute strftime

Es kann doch nicht so schwer sein nur die Uhrzeit anzuzeigen.
Ich stehe leider voll auf dem Schlauch. Kann mir jemand mal ein Bespiel machen wie es gehen könnte.
Mit Kommentaren wie lies die Doku komme ich nicht weiter.
Danke
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast ja auch kein datetime Objekt. Sondern ein timedelta Objekt. Das hat keine strftime Methode, weil das da sinnlos ist. Du kannst dieses Objekt aber nach der Anzahl der verflossenen Anzahl von Tagen, Sekunden und Microsekunden fragen. Oder zb der total_seconds. Und daraus errechnen, was du brauchst.
Antworten