Formatar tempo decorrido em hh:mm:ss.ff. (Python)

As vezes é bom medir o tempo decorrido em um operação, mas um simples print de um objeto time não é lá muito amigável. Neste post, vou mostrar como formatar em horas, minutos, segundos e milissegundos o tempo decorrido em uma operação.

Para realizarmos esta operação, precisaremos da função time(), que fica no pacote time:

from time import time

 

Agora precisamos das variáveis com o horário de inicio, o de conclusão e a diferença entre elas:

start = time()
# Operations...
end = time()
diff = end - start

 

O próximo passo é conseguir o número de horas:

hours, r = divmod(diff, 3600)

A função divmod retorna o resultado da divisão (hours) E o resto (r).  Uma alternativa para este método seria fazer uma divisão e depois um mod (%), mas com esta função, economizamos um statement.

Apenas para exemplificar, a utilização da função divmod seria o equivalente a fazer isso:

hours = diff / 3600
r = diff % 3600

 

Neste ponto, já temos as horas. Agora precisamos dos minutos e segundos. Spoiler alert: Vamos utilizar a mesma lógica.

minutes, seconds = divmod(r, 60)

 

Para exibir no formato que desejamos, agora basta formatar a string:

print("{hours:0>2}:{minutes:0>2}:{seconds:05.3f}".format(hours=hours, minutes=minutes, seconds=seconds))

 

Para facilitar, fiz um snippet no GitHub com uma função que retorna a string já formatada.

 

Espero ter ajudado.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, Python and tagged , , , .