J'ai deux datetime.time
valeurs, exit
et enter
je veux faire quelque chose comme:
duration = exit - enter
Cependant, j'obtiens cette erreur:
TypeError: type (s) d'opérande non pris en charge pour -: 'datetime.time' et 'datetime.time
Comment faire cela correctement? Une solution possible est de convertir les time
variables en datetime
variables, puis de les soustraire, mais je suis sûr que vous devez avoir un moyen meilleur et plus propre.
datetime(1,1,1,0,0,0)
place dedate.today()
.datetime
exit
, carexit
c'est une fonction intégrée.combine
méthode dans mondatetime
module:AttributeError: 'module' object has no attribute 'combine'
datetime
module et il a undatetime
objet à l'intérieur. L'objet à l'intérieur a unecombine
méthode. Si vous importez simplementdatetime
(comme ceci :)import datetime
, alors ce que vous devez faire plus tard est cecidatetime.datetime.combine
.date.today()
avant et ledate.today()
plus tard renverront une valeur différente. Il serait préférable de donner la valeurdate.today()
à une variable.Utilisation:
L'utilisation
date.min
est un peu plus concise et fonctionne même à minuit.Cela pourrait ne pas être le cas avec
date.today()
cela pourrait renvoyer des résultats inattendus si le premier appel se produit à 23:59:59 et le suivant à 00:00:00.la source
au lieu d'utiliser le temps, essayez timedelta:
la source
datetime.time
ne prend pas en charge cela, car il est presque inutile de soustraire des temps de cette manière. Utilisez un pleindatetime.datetime
si vous voulez faire cela.la source
datetime.time
objetsa
etb
sont du même jour, et celab > a
, alors l'opérationb - a
a un sens parfait.arctan(0) = (0, pi, 2pi, ...)
, mais nous ne nous soucions simplement d'aucune de ces valeurs après la première. Alors,4:00 - 20:00
est8:00
- il est aussi (32:00
,56:00
, ...), mais qui se soucie?Vous avez deux objets datetime.time donc pour cela vous créez simplement deux timedelta en utilisant datetime.timedetla puis soustrayez comme vous le faites maintenant en utilisant l'opérande "-". Voici un exemple de façon de soustraire deux fois sans utiliser datetime.
difference_delta est votre différence que vous pouvez utiliser pour vos raisons.
la source
datetime.min + delta
La bibliothèque python timedelta devrait faire ce dont vous avez besoin. A
timedelta
est renvoyé lorsque vous soustrayez deuxdatetime
instances.la source
la source
datetime.time
ne peut pas le faire - mais vous pourriez utiliserdatetime.datetime.now()
la source
J'ai eu une situation similaire à celle que vous et moi avons fini par utiliser une bibliothèque externe appelée arrow .
Voici à quoi cela ressemble:
la source