Calcule Diferenças de Tempo em Python: Guia Completo com datetime e timedelta

Foto do autor

By luis

Ao manipular datas e horários em Python, surge frequentemente a necessidade de calcular a diferença temporal. Este guia prático irá orientá-lo sobre como determinar a diferença entre dois timestamps, expressando-a em horas, minutos e segundos.

Ao concluir este tutorial, você terá adquirido o conhecimento necessário para:

  • Utilizar o módulo datetime do Python para efetuar operações com datas e horários;
  • Compreender o conceito de objetos timedelta e sua aplicação prática;
  • Calcular a diferença temporal entre dois timestamps quaisquer, apresentando o resultado em horas, minutos e segundos.

Vamos iniciar nossa jornada de aprendizado!

Dominando o Módulo datetime do Python

O módulo datetime é sua ferramenta essencial para lidar com datas e horários em Python. Integrado à biblioteca padrão da linguagem, ele pode ser importado diretamente para seu ambiente de desenvolvimento da seguinte maneira:

import datetime

Para calcular a diferença de tempo, é necessário estabelecer dois pontos de referência temporais distintos. Você pode optar por criar:

  • Dois objetos representando datas;
  • Dois objetos representando horários; ou
  • Uma combinação de data e hora, utilizando objetos datetime.

Construindo um Objeto de Data em Python

Vamos importar a classe `date` do módulo `datetime`. A criação de um objeto de data em Python é feita através da sintaxe `datetime.date(, , )`. Observe o exemplo abaixo, que ilustra a criação de um objeto de data denominado `date1`:

from datetime import date
date1 = datetime.date(2022,3,27)
print(date1)

# Saída: 2022-03-27

Você pode testar este código no compilador do etechpt.com ou instalar o Python em sua máquina.

Como demonstrado, ao imprimir um objeto de data, ele é formatado no padrão AAAA-MM-DD.

Atenção: Ao especificar o mês, utilize um número inteiro, sem zeros à esquerda. É comum a prática de adicionar um zero à esquerda ao escrever datas.

Por exemplo, para representar junho, o sexto mês do ano, utilize o número 6, e não 06.

Para ilustrar este ponto, observe o seguinte trecho de código. Ao especificar o mês como 03 em vez de 3, você receberá um erro de sintaxe:

date1 = datetime.date(2022,03,27)

print(date1)

# Mensagem de Erro
File "<ipython-input-12-6eb72084e6ce>", line 1
    date1 = datetime.date(2022,03,27)
                                ^
SyntaxError: invalid token

Agora, vamos aprender como criar um objeto de tempo em Python.

Construindo um Objeto de Tempo em Python

Para criar um objeto de tempo, vamos importar a classe `time`. Objetos de tempo em Python são construídos utilizando a classe `time`, especificando atributos como hora, minuto, segundo e microssegundo.

Todos esses atributos são opcionais. Caso um atributo não seja especificado, por exemplo, o segundo, ele assumirá o valor padrão 0.

O código a seguir demonstra a criação de um objeto de tempo chamado `time1`. Assim como com objetos de data, você pode imprimir o objeto de tempo para visualizar o horário formatado:

from datetime import time
time1 = datetime.time(13,27,45,4600)
print(time1)

# Saída: 13:27:45.004600

Construindo um Objeto de Data e Hora em Python

Como vimos, o objeto de data não contém informações sobre o horário, e o objeto de tempo não contém informações sobre a data.

Em muitos casos, você precisará de ambas as informações. Por isso, a classe `datetime` é a mais recomendada.

Você pode criar objetos `datetime` em Python conforme o exemplo:

dt1 = datetime.datetime(2022,3,27,13,27,45,46000)
print(dt1)

# Saída: 2022-03-27 13:27:45.046000

Agora, vamos criar outro objeto `datetime` chamado `dt2`, omitindo o atributo de segundo. Observe que ele é definido com o valor padrão 0.

dt2 = datetime.datetime(2022,6,30,14,28)
print(dt2)

# Saída: 2022-06-30 14:28:00

Até agora, você aprendeu a criar timestamps em Python – datas, horários e datas e horários combinados. Agora, vamos explorar como calcular a diferença entre quaisquer dois timestamps.

Acompanhe a próxima seção para descobrir!

O Poder do Objeto timedelta em Python

Em Python, `timedelta` representa um intervalo de tempo, a diferença entre dois objetos de data, hora ou data e hora.

Ao subtrair dois objetos de data, hora ou data e hora, o resultado é um objeto `timedelta`. Este objeto possui atributos e métodos úteis para auxiliar no cálculo de diferenças temporais.

Vamos calcular a diferença entre os objetos `datetime` `dt1` e `dt2`:

dt1 = datetime.datetime(2022,3,27,13,27,45,46000) 
dt2 = datetime.datetime(2022,6,30,14,28) 
tdelta = dt2 - dt1 
print(tdelta) 
print(type(tdelta)) 

# Saída 
95 days, 1:00:14.954000 
<class 'datetime.timedelta'>

O código demonstra que a variável `tdelta` armazena a diferença de tempo entre `dt1` e `dt2`. O tipo de `tdelta` é verificado como sendo da classe `timedelta` utilizando a função built-in type().

Vamos analisar outro exemplo prático.

Calculando a Diferença de Tempo entre Datas

Vamos abordar um problema simples e interessante:

Calcular a diferença de tempo entre a data atual e o seu aniversário. Para isso, vamos definir o timestamp atual como o primeiro ponto de referência e o seu aniversário como o segundo.

Inicialmente, criaremos dois objetos `datetime`:

  • Um para a data atual, que chamaremos de `today`;
  • Outro para o seu aniversário, que chamaremos de `birthday`.

A classe `datetime` possui o método `now()`, que retorna a data e hora local atual. Vamos utilizá-lo para definir a data de referência, `today`:

today = datetime.datetime.now()
print(today)

# Exemplo de Saída: 2022-01-22 09:10:18.489538

No código a seguir, substitua `bday` pela data do seu aniversário para calcular o tempo restante para a data neste ano.

Caso esteja lendo este artigo após seu aniversário, sinta-se à vontade para definir a data para o seu próximo aniversário.

bday = datetime.datetime(2022,8,30,11,59)
print(bday)

# Exemplo de Saída: 2022-08-30 11:59:00

O próximo passo é calcular a diferença de tempo, que é um objeto `timedelta`, conforme explicado anteriormente. Subtraia a data atual (`today`) da data do seu aniversário (`bday`) para obter a diferença temporal.

time_diff = bday - today
print(f"Seu aniversário é em {time_diff}")

# Saída
Seu aniversário é em 220 dias, 2:46:00.127416

Para obter o número de dias restantes, utilize o atributo `days` do objeto `time_diff`:

tdays = time_diff.days
print(f"Seu aniversário é em {tdays} dias.")

# Saída
Seu aniversário é em 220 dias.

Calculando a Diferença de Tempo em Segundos

Agora, vamos calcular quantos segundos faltam para o seu aniversário.

Para calcular a diferença total em segundos, utilize o método `total_seconds()` no objeto `timedelta` `time_diff`:

tsecs = time_diff.total_seconds()
print(f"Seu aniversário está a {tsecs} segundos de distância.")

# Saída
Seu aniversário está a 19017960.127416 segundos de distância.

Isso é bastante tempo de espera!

Agora, você já sabe como calcular a diferença de tempo entre dois timestamps em segundos.

Vamos relembrar alguns conceitos básicos: um dia possui 24 horas, uma hora possui 60 minutos e um minuto possui 60 segundos.

Essa relação está representada na imagem abaixo:

Horas, Minutos e Segundos

Portanto, para converter segundos em minutos, horas e dias, podemos usar a tabela a seguir e dividir pelo fator de conversão correspondente.

Tabela de Conversão de Tempo

Nas próximas seções, vamos converter a diferença horária de segundos para minutos e horas.

Calculando a Diferença de Tempo em Minutos

Para obter a diferença de tempo em minutos, basta dividir o total de segundos por 60.

Vamos dividir `tsecs` por 60 e armazenar o resultado em uma variável chamada `tmins`:

tmins = tsecs/60
print(f"Seu aniversário está a {tmins} minutos de distância.")

# Saída
Seu aniversário está a 316966.0021236 minutos de distância.

Calculando a Diferença de Tempo em Horas

Agora que calculamos a diferença de tempo em minutos, podemos dividi-la por 60 para obter a diferença em horas. Ou podemos dividir o total de segundos por 60*60 = 3600.

thrs = tsecs/(60*60)
print(f"Seu aniversário está a {thrs} horas de distância.")

# Saída
Seu aniversário está a 5282.76670206 horas de distância.

Agora, você já aprendeu a calcular a diferença de tempo em qualquer unidade de medida desejada.

Conclusão

Neste guia prático, você aprendeu como:

  • Criar e manipular datas e horários utilizando o módulo datetime do Python;
  • Utilizar objetos timedelta para obter intervalos de tempo ou diferenças temporais;
  • Calcular a diferença temporal em segundos, minutos e horas.

Espero que este tutorial tenha sido útil. Agora que você domina o cálculo da diferença de tempo em Python, é hora de colocar seus conhecimentos em prática!

Bons estudos e boa codificação!

Explore outros tutoriais, como aprender a escrever código de igual ou não igualdade, ou criar um jogo de cobra em Python.