Muitas das vezes você precisará calcular data e hora em Python. Neste tutorial, você aprenderá a calcular a diferença entre dois timestamps em horas, minutos e segundos.
Ao final deste artigo, você terá aprendido:
- como usar o módulo
datetimedo Python para trabalhar com datas e horas. - o que são
timedeltaobjetos e como eles são úteis. - calcular a diferença de tempo entre dois timestamps — em horas, minutos e segundos.
Vamos começar.
Como usar o módulo datetime do Python
Então, para trabalhar com datas e horas em Python, você usará o módulo <em>datetime</em>. O módulo datetime faz parte da biblioteca padrão do Python. Então você pode ir em frente e importá-lo para o seu ambiente de trabalho imediatamente, assim:
import datetime
Para calcular a diferença de tempo, você precisa criar dois timestamps diferentes. Você pode optar por criar:
- dois
dateobjetos, - dois
timeobjetos ou - uma combinação de ambos
datee<em>time</em>-datetimeobjetos.
Leia também: Os 5 Melhores Livros de Python Para Programadores
Como criar um objeto de data em Python
Vamos importar a dateclasse do módulo datetime. Para criar um objeto de data em Python, você pode usar a sintaxe geral <em>datetime.date(<year>,<month>,<day>)</em>. Aqui está um exemplo de criação de um objeto date - date1:
from datetime import date
date1 = datetime.date(2022,3,27)
print(date1)
# Saída: 2022-03-27
Conforme mostrado acima, quando você imprime a data, ela é formatada no formato YYYY-MM-DD para datas.
Nota: Certifique-se de especificar o mês como um número inteiro sem zeros à esquerda. É provável que você esteja acostumado a adicionar um zero à esquerda ao mês ao escrever datas.
Por exemplo, para especificar uma data em junho, o 6º mês do ano: use 6 e não 06.
Por exemplo, tente executar o trecho de código a seguir, onde o mês foi mencionado como 03 em vez de apenas 3. Você verá que ele lança um erro de sintaxe, conforme mostrado:
date1 = datetime.date(2022,03,27)
print(date1)
# Error Message
File "<ipython-input-12-6eb72084e6ce>", line 1
date1 = datetime.date(2022,03,27)
^
SyntaxError: invalid token
Vamos agora ver como criar um objeto time em Python.
Como criar um objeto de tempo em Python
Para criar um objeto de tempo, vamos importar a classe time. Qualquer objeto de tempo do Python pode ser criado usando a classe time especificando os seguintes atributos de classe: <em>hour</em>, <em>minute</em>, second e <em>microsecond</em>.
No entanto, todos esses atributos são opcionais. Se você não especificar um determinado atributo, digamos, <em>second</em>, ele será definido como padrão 0.
O trecho de código a seguir mostra como você pode criar um objeto de tempo <em>time1</em>. Assim como com o objeto <em>date</em>, você pode imprimir o objeto time para ver a hora formatada.
from datetime import time
time1 = datetime.time(13,27,45,4600)
print(time1)
# Saída: 13:27:45.004600
Leia também: Guia Completo de JavaScript para Iniciantes
Como criar um objeto de data e hora em Python
Como você pode ver, o objeto date não possui informações sobre a hora. E o objeto time não contém informações sobre a data.
No entanto, na prática, você precisará das informações de data e hora. Portanto, é recomendável usar a classe <em>datetime</em>.
Você pode acessar a classe datetime e criar objetos datetime em Python, conforme mostrado abaixo:
dt1 = datetime.datetime(2022,3,27,13,27,45,46000)
print(dt1)
# Saída: 2022-03-27 13:27:45.046000
Vamos agora criar outro objeto datetime dt2 sem o atributo <em>second</em>. Você pode ver que está definido o valor padrão para 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 carimbos de data/hora em Python — como datas, horas e datas. Agora é hora de ver como você pode calcular a diferença entre quaisquer dois timestamps.
Vá para a próximo tópico para descobrir.
Como usar o objeto timedelta em Python
Em Python, timedelta denota um intervalo de tempo. É a diferença entre dois <em>date</em>, <em>time</em>, ou objetos <em>datetime</em>.
Se você adicionar ou subtrair dois <em>date</em>, <em>time</em>, ou objetos <em>datetime</em>, você obterá um objeto <em>timedelta</em>. Este objeto timedelta possui atributos e métodos úteis que podem ajudar a calcular a diferença horária.
Vamos em frente e calcular a diferença entre os dois objetos datetime dt1 e <em>dt2</em>.
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 dias, 1:00:14.954000
<class 'datetime.timedelta'>
Então, a partir do trecho de código acima, você pode ver que a variável tdelta contém a diferença de tempo entre <em>dt1</em> e <em>dt2</em>. Dessa forma, o tipo de tdelta é verificado para ser da classe timedelta usando a função interna do Python type().
Como encontrar a diferença de tempo entre duas datas
Vamos dar um exemplo simples, porém interessante.
Problema: Para calcular a diferença de tempo entre a data atual (hoje) e seu aniversário. Para fazer isso, defina hoje como o primeiro "carimbo" de data/hora e seu aniversário como o segundo "carimbo" de data/hora.
Como primeiro passo, vamos criar dois objetos <em>datetime</em>:
- um para hoje, vamos chamá-lo
<em>today</em>, e - outro para o seu aniversário, vamos chamá-lo
<em>bday</em>
A classe <em>datetime</em> tem o método now() que fornece a data e hora locais atuais. Então vamos usá-lo para obter nossa data de referência <em>today</em>.
today = datetime.datetime.now()
print(today)
# Saída de Amostra: 2022-01-22 09:10:18.489538
Portanto, no código abaixo, substitua bday por sua data de nascimento para calcular o tempo restante para seu aniversário este ano.
Então, se você estiver lendo isso depois que seu aniversário já tiver passado, sinta-se à vontade para definir bday seu próximo aniversário.
bday = datetime.datetime(2022,8,30,11,59)
print(bday)
# Saída de Amostra: 2022-08-30 11:59:00
Dessa forma, o próximo passo é calcular o time_diff que é um objeto timedleta, conforme explicado anteriormente. Basta subtrair today do seu <em>bday</em>, e você terá a diferença de tempo.
time_diff = bday - today
print(f"Seu aniversário é daqui a {time_diff}")
# Saída
Seu aniversário é daqui a 220 dias, 2:46:00.127416
Portanto, para saber o número de dias restantes, use o atributo days em <em>time_diff</em>, conforme mostrado:
tdays = time_diff.days
print(f"Seu aniversário é em {tdays} dias.")
# Saída
Seu aniversário é em 220 dias.
Como encontrar a diferença de tempo em segundos
Vamos agora calcular quantos segundos faltam para o seu aniversário.
Então, para calcular a diferença de tempo total em segundos, use o método total_seconds() no objeto timedelta - <em>time_diff</em>.
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.
Bem, isso é muito tempo de espera!
Dessa forma, agora você sabe como calcular a diferença de tempo entre quaisquer dois timestamps em segundos.
Então, vamos agora revisitar alguns conceitos básicos e escrever o seguinte. Um dia é composto por 24 horas, uma hora tem 60 minutos e 60 segundos compõem um minuto.
Isso está resumido na tabela abaixo:
Horas, minutos e segundos
Tabela de conversão de tempo
Leia também: Introdução a programação orientada a objetos
Como encontrar a diferença de tempo em minutos
Para obter a diferença horária em minutos, basta dividir o total de segundos por 60.
Portanto, vamos dividir tsecs por 60 e armazená-lo em uma variável chamada <em>tmins</em>, assim:
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.
Como encontrar a diferença horária em horas
Portanto, agora que você calculou a diferença de tempo em minutos, você pode dividir isso por um fator de 60 para obter a diferença em horas. Ou você pode 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.
Então agora você aprendeu a calcular a diferença de tempo em qualquer unidade de sua escolha.
Conclusão de como calcular data e hora em Python
Neste artigo, você aprendeu como:
- criar e trabalhar com datas e horas usando o módulo do Python
<em>datetime</em>, - usar objetos
timedeltapara obter um intervalo de tempo, ou diferença de tempo, e - calcular a diferença horária em segundos, minutos e horas.
Então, espero que você tenha achado este artigo útil. Agora que você sabe tudo sobre como calcular a diferença de tempo em Python.
Leia também: O que é programação orientada a objetos? (POO)