Preciso de ajuda para resolver um problema e estou tendo dificuldades em python.
Preciso somar o total de tempo que um dado item ficou em uma fila
Exemplo:
ITEM foi para fila X na fila 2022-03-15T12:23:16
ITEM foi devolvido para fila Y 2022-03-16T12:23:16
ITEM foi para fila X na fila 2022-03-17T12:23:16
ITEM foi devolvido para fila Y 2022-03-18T12:23:16
ITEM foi para fila X na fila 2022-03-19T12:23:16
ou seja, preciso somar o total de tempo em horas minutos e segundos que o ITEM A ficou somente na fila X, desconsiderando o tempo que ele ficou na fila Y.
A ultima soma é a data atual até o ultimo horário obtido da fila X
obrigado
Mas como o programa recebe os dados?
Enfim, dê uma olhada no módulo datetime
, que já tem tudo que você precisa.
Se você recebe as datas como strings, basta usar strptime
para transformá-las em datetime
. Depois, subtraindo as datas você obtém um timedelta
(que é o objeto que guarda a quantidade de tempo - a duração). Algo assim:
from datetime import datetime, timedelta
# duração total
total = timedelta(seconds=0)
# entrada é quando entrou na fila X, saída é quando foi para outra fila
entrada1 = datetime.strptime('2022-03-15T12:23:16', '%Y-%m-%dT%H:%M:%S')
saida1 = datetime.strptime('2022-03-16T12:23:16', '%Y-%m-%dT%H:%M:%S')
# subtrai a entrada da saída, obtendo-se a duração
# depois, soma essa duração ao total
total += saida1 - entrada1
# outra entrada na fila X, outra saída (ida para outra fila)
entrada2 = datetime.strptime('2022-03-17T12:23:16', '%Y-%m-%dT%H:%M:%S')
saida2 = datetime.strptime('2022-03-18T12:23:16', '%Y-%m-%dT%H:%M:%S')
# subtrai a entrada da saída, obtendo-se a duração
# depois, soma essa duração ao total
total += saida2 - entrada2
entrada3 = datetime.strptime('2022-03-19T12:23:16', '%Y-%m-%dT%H:%M:%S')
saida3 = datetime.now() # horário atual
# subtrai a entrada da saída, se ainda não passou a data atual
if saida2 > entrada3:
# soma essa duração ao total
total += saida3 - entrada3
print(saida3 - entrada3)
print(total)
Como neste caso as datas estão no formato ISO 8601, você pode trocar isso:
datetime.strptime('2022-03-15T12:23:16', '%Y-%m-%dT%H:%M:%S')
por isso:
datetime.fromisoformat('2022-03-15T12:23:16')