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.

128voto

gruszczy Points 14097

Essayez ceci :

from datetime import datetime, date

datetime.combine(date.today(), exit) - datetime.combine(date.today(), enter)

combine construit une date, qui peut être soustraite.

69voto

alartur Points 379

Utiliser :

from datetime import datetime, date

duration = datetime.combine(date.min, end) - datetime.combine(date.min, beginning)

Utilisation date.min est un peu plus concis et fonctionne même à minuit.

Cela pourrait ne pas être le cas avec date.today() qui pourrait donner des résultats inattendus si le premier appel a lieu à 23:59:59 et le suivant à 00:00:00.

54voto

Edmilson Junior Points 116

Au lieu d'utiliser le temps, essayez timedelta :

from datetime import timedelta

t1 = timedelta(hours=7, minutes=36)
t2 = timedelta(hours=11, minutes=32)
t3 = timedelta(hours=13, minutes=7)
t4 = timedelta(hours=21, minutes=0)

arrival = t2 - t1
lunch = (t3 - t2 - timedelta(hours=1))
departure = t4 - t3

print(arrival, lunch, departure)

10voto

Hardik Patel Points 453

Vous avez deux objets datetime.time, il vous suffit donc de créer deux timedelta à l'aide de datetime.timedetla, puis de les soustraire comme vous le faites actuellement à l'aide de l'opérande "-". Voici un exemple de soustraction de deux temps sans utiliser datetime.

enter = datetime.time(hour=1)  # Example enter time
exit = datetime.time(hour=2)  # Example start time
enter_delta = datetime.timedelta(hours=enter.hour, minutes=enter.minute, seconds=enter.second)
exit_delta = datetime.timedelta(hours=exit.hour, minutes=exit.minute, seconds=exit.second)
difference_delta = exit_delta - enter_delta

différence_delta est votre différence que vous pouvez utiliser pour vos raisons.

9voto

Ben Points 414

Le python timedelta La bibliothèque devrait répondre à vos besoins. A timedelta est retourné lorsque l'on soustrait deux datetime instances.

import datetime
dt_started = datetime.datetime.utcnow()

# do some stuff

dt_ended = datetime.datetime.utcnow()
print((dt_ended - dt_started).total_seconds())

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