[Python] Wie kann ich am besten die Stunden aus einer Zeitspanne entnehmen?

2 Antworten

timeList = ["10.00-18.00", "10.30-18.00"]


def timeBetween(time): # Funktion zum Zeitspanne rechnen
    time1 = time.split("-")[0].strip() # Zeiten bekommen und mögliche Leertaste entfernen
    time2 = time.split("-")[1].strip()
    
    hour1 = int(time1.split(".")[0]) # Stunde und Minute als Zahl erhalten
    minute1 = int(time1.split(".")[1])
    
    hour2 = int(time2.split(".")[0])
    minute2 = int(time2.split(".")[1])
    
    resultHour = hour2 - hour1 # Stunde berechnen
    resultMinute = minute2 - minute1 # Minute berechnen
    
    if resultMinute < 0: # Wenn resultMinute eine Minus Zahl, muss sie von 60 Subtrahiert werden, damit aus -20 eine 40 wird
        resultMinute = 60 + resultMinute
        resultHour -= 1 # Weil 0 unterschritten wurde, muss auch die Stunde -1 gerechnet werden
    
    sResultHour = str(resultHour) # Zahl zu String
    if resultHour < 10:
        sResultHour = "0" + str(resultHour) # Bei Zahl unter 10, eine 0 davor, damit man 01 statt 1 hat
    
    sResultMinute = str(resultMinute)
    if resultMinute < 10:
        sResultMinute = "0" + str(resultMinute)
    
    resultTime = sResultHour + "." + sResultMinute # Ergebnis wieder zusammenbauen
    return resultTime


for time in timeList:
    print(timeBetween(time))

Probiere es mal damit 😉 Habe es mit deinen Werten getestet. Hat geklappt. Kannst es ja weiter testen und möglicherweise verbessern :)

Du kannst hier nicht Kommazahlen benutzen. Deshalb geht es nicht. Kommazahlen gehen bis zur nächsten 1, also 0,1 0,2 0,3 ... 0,8 0,9 1,0

Du musst es also etwas umbauen und einzeln rechnen. Dann wieder zusammenbauen. Um immer dran denken. Ist die Minute über die Grenze, muss die Stunde minus 1

>>> import datetime as dt
>>> t2=dt.datetime.strptime('18:00','%H:%M')
>>> t1=dt.datetime.strptime('10:30','%H:%M')
>>> t2-t1
datetime.timedelta(seconds=27000)
>>> mins,secs=divmod((t2-t1).seconds,60)
>>> mins,secs
(450, 0)
>>> hrs,mins=divmod(mins,60)
>>> hrs
7
>>> mins
30

So könnte man das machen, Du müßtest natürlich "%H.%M" als Format-String nutzen.