Eu tenho dois datetime.time
valores, exit
eenter
e quero fazer algo como:
duration = exit - enter
No entanto, recebo este erro:
TypeError: tipo (s) de operando não suportado (s) para -: 'datetime.time' e 'datetime.time
Como faço isso corretamente? Uma solução possível é converter as time
variáveis em datetime
variáveis e depois subtruir, mas tenho certeza de que vocês devem ter uma maneira melhor e mais limpa.
datetime(1,1,1,0,0,0)
vez dedate.today()
.datetime
exit
, poisexit
é uma função embutida.combine
método em meudatetime
módulo:AttributeError: 'module' object has no attribute 'combine'
datetime
módulo e umdatetime
objeto dentro. O objeto dentro temcombine
método. Se você estiver simplesmente importandodatetime
(como esteimport datetime
:), o que você precisa fazer mais tarde é issodatetime.datetime.combine
.date.today()
antes e odate.today()
depois retornarão um valor diferente. Seria melhor atribuir o valordate.today()
a uma variável.Usar:
O uso
date.min
é um pouco mais conciso e funciona até à meia-noite.Pode não ser o caso,
date.today()
pois pode retornar resultados inesperados se a primeira chamada acontecer às 23:59:59 e a próxima às 00:00:00.fonte
em vez de usar o tempo, tente timedelta:
fonte
datetime.time
não suporta isso, porque é quase sem sentido subtrair tempos dessa maneira. Use um completodatetime.datetime
se quiser fazer isso.fonte
datetime.time
objetosa
eb
são do mesmo dia, e issob > a
, a operaçãob - a
tem um significado perfeito.arctan(0) = (0, pi, 2pi, ...)
, mas simplesmente não nos importamos com nenhum desses valores depois do primeiro. Então,4:00 - 20:00
é8:00
- é também (32:00
,56:00
...), mas quem se importa?Você tem dois objetos datetime.time, portanto, basta criar dois timedelta usando datetime.timedetla e subtrair como faria agora usando o operando "-". A seguir está o exemplo de maneira de subtrair duas vezes sem usar datetime.
diferença_delta é a sua diferença que você pode usar para suas razões.
fonte
datetime.min + delta
A biblioteca python timedelta deve fazer o que você precisa. A
timedelta
é retornado quando você subtrai duasdatetime
instâncias.fonte
fonte
datetime.time
não posso fazer isso - mas você poderia usardatetime.datetime.now()
fonte
Tive situação semelhante à de você e acabamos usando uma biblioteca externa chamada arrow .
Aqui está o que parece:
fonte