173 votes

soustraire deux fois en python

J'ai deux datetime.time valeurs, exit y enter et je veux faire quelque chose comme :

duration = exit - enter

Cependant, j'obtiens cette erreur :

TypeError : unsupported operand type(s) for - : 'datetime.time' and 'datetime.time

Comment procéder correctement ? Une solution possible consiste à convertir le time les variables à datetime puis subtruct, mais je suis sûr que vous devez avoir une meilleure méthode, plus propre.

7voto

gies0r Points 107

datetime.time ne peut pas le faire - Mais vous pouvez utiliser datetime.datetime.now()

start = datetime.datetime.now()
sleep(10)
end = datetime.datetime.now()
duration = end - start

5voto

datetime.time ne le permet pas, car la soustraction de temps de cette manière n'a pratiquement aucun sens. Utiliser un datetime.datetime si vous voulez le faire.

4voto

jacanterbury Points 446
import datetime

def diff_times_in_seconds(t1, t2):
    # caveat emptor - assumes t1 & t2 are python times, on the same day and t2 is after t1
    h1, m1, s1 = t1.hour, t1.minute, t1.second
    h2, m2, s2 = t2.hour, t2.minute, t2.second
    t1_secs = s1 + 60 * (m1 + 60*h1)
    t2_secs = s2 + 60 * (m2 + 60*h2)
    return( t2_secs - t1_secs)

# using it
diff_times_in_seconds( datetime.datetime.strptime( "13:23:34", '%H:%M:%S').time(),datetime.datetime.strptime( "14:02:39", '%H:%M:%S').time())

3voto

kochul Points 94

timedelta accepte les valeurs temporelles négatives (-). Il pourrait donc être simple comme ci-dessous.

Réponse (ligne unique)

datetime.timedelta(hours=exit.hour-enter.hour, minutes=exit.minute-enter.minute)

Test d'exécution

import datetime

enter = datetime.time(hour=1, minute=30)
exit = datetime.time(hour=2, minute=0)
duration = datetime.timedelta(hours=exit.hour-enter.hour, minutes=exit.minute-enter.minute)

>>> duration
datetime.timedelta(seconds=1800)

2voto

ssoler Points 923
>>> from datetime import datetime
>>> from time import sleep
>>> d1=datetime.now();sleep(1);d2=datetime.now()
>>> diff=d2-d1
>>> print diff
0:00:01.001153
>>> type(diff)
<type 'datetime.timedelta'>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X