Manipulação de Datas e Horas em Python com o Módulo datetime

Trabalhar com datas e horas é uma tarefa comum no desenvolvimento de software, mas muitas vezes pode parecer complicada devido aos diferentes formatos, fusos horários e cálculos envolvendo datas. Felizmente, Python oferece o módulo datetime, que torna essas operações muito mais fáceis e eficientes.

Neste artigo, você vai aprender:

  • Como obter datas e horas atuais.

  • Como criar datas e horários específicos.

  • Como formatar datas e horas para exibição.

  • Como realizar operações aritméticas com datas.

  • Como lidar com fusos horários.

  • Exemplos práticos para aplicações reais.


🔹 O que é o módulo datetime?

O módulo datetime é parte da biblioteca padrão do Python e fornece classes para trabalhar com:

  • date → apenas data (ano, mês, dia)

  • time → apenas hora (hora, minuto, segundo, microsegundo)

  • datetime → data e hora completas

  • timedelta → diferença entre datas ou horas

  • timezone → fusos horários

Ele oferece uma forma estruturada e segura de manipular datas sem precisar se preocupar com cálculos manuais.


🔹 Obtendo a data e hora atual

Para começar, podemos obter a data e hora atuais usando datetime.now():

from datetime import datetime

agora = datetime.now()
print("Data e hora atuais:", agora)

Saída típica:

Data e hora atuais: 2025-10-01 11:35:42.123456

Se você quiser apenas a data ou apenas a hora, pode usar:

print("Data:", agora.date())
print("Hora:", agora.time())

🔹 Criando datas e horas específicas

Você também pode criar objetos datetime ou datetime manualmente:

from datetime import date, time, datetime

# Data específica
data_nascimento = date(1995, 6, 15)
print("Data de nascimento:", data_nascimento)

# Hora específica
horario = time(14, 30, 45)
print("Horário:", horario)

# Data e hora combinadas
evento = datetime(2025, 12, 25, 18, 0, 0)
print("Evento:", evento)

📌 Observação: O construtor datetime(year, month, day, hour, minute, second) permite criar qualquer data/hora exata.


🔹 Formatando datas e horas

Para exibir datas de forma legível, usamos o método strftime(). Ele converte objetos datetime em strings customizadas:

from datetime import datetime

agora = datetime.now()

# Formatos comuns
print(agora.strftime("%d/%m/%Y"))          # 01/10/2025
print(agora.strftime("%A, %d de %B de %Y"))  # Quarta-feira, 01 de Outubro de 2025
print(agora.strftime("%H:%M:%S"))          # 11:35:42

Alguns códigos úteis do strftime():

CódigoSignificado
%dDia do mês (01-31)
%mMês (01-12)
%YAno completo (2025)
%HHora (00-23)
%MMinuto (00-59)
%SSegundo (00-59)
%ANome completo do dia
%BNome completo do mês

🔹 Convertendo strings em datas (strptime)

Às vezes, você recebe datas como texto (ex: “25/12/2025”) e precisa convertê-las para datetime. Para isso usamos strptime():

from datetime import datetime

data_texto = "25/12/2025"
data_objeto = datetime.strptime(data_texto, "%d/%m/%Y")
print("Data convertida:", data_objeto)

Agora, data_objeto pode ser manipulada como um objeto datetime, não apenas como string.


🔹 Operações com datas (timedelta)

Para adicionar ou subtrair dias, horas ou minutos, usamos timedelta:

from datetime import datetime, timedelta

hoje = datetime.now()
print("Hoje:", hoje)

# Adicionar 10 dias
futuro = hoje + timedelta(days=10)
print("Daqui a 10 dias:", futuro)

# Subtrair 5 horas
passado = hoje - timedelta(hours=5)
print("5 horas atrás:", passado)

Você também pode calcular a diferença entre datas:

data_evento = datetime(2025, 12, 25)
dias_restantes = data_evento - hoje
print("Dias até o evento:", dias_restantes.days)

🔹 Lidando com fusos horários (timezone)

Para trabalhar com horários globais, o módulo oferece a classe timezone:

from datetime import datetime, timezone, timedelta

# Fuso horário UTC+3
fuso = timezone(timedelta(hours=3))
agora_fuso = datetime.now(fuso)
print("Hora em UTC+3:", agora_fuso)

📌 Para aplicações que lidam com APIs internacionais ou bancos de dados globais, sempre use UTC internamente e converta apenas na exibição.


🔹 Exemplos práticos de aplicação

1. Validação de datas

from datetime import datetime

data_input = "31/02/2025"

try:
    data_validada = datetime.strptime(data_input, "%d/%m/%Y")
except ValueError:
    print("Data inválida!")

2. Cronômetro simples

from datetime import datetime, timedelta
import time

inicio = datetime.now()
time.sleep(3)  # simula processamento
fim = datetime.now()

duracao = fim - inicio
print(f"Processamento levou {duracao.total_seconds()} segundos")

3. Geração de relatórios mensais

from datetime import datetime, timedelta

hoje = datetime.now()
primeiro_dia_mes = hoje.replace(day=1)
print("Relatório a partir de:", primeiro_dia_mes.strftime("%d/%m/%Y"))

🔹 Dicas e boas práticas

  • Sempre use objetos datetime ao invés de manipular strings manualmente.

  • Prefira UTC para armazenar datas em sistemas distribuídos.

  • Use strftime para exibir datas no formato do usuário final.

  • Combine timedelta com datetime para cálculos seguros de datas.


✅ Conclusão

O módulo datetime é extremamente poderoso e essencial para qualquer desenvolvedor Python que trabalhe com datas e horas, seja em:

  • Aplicações financeiras

  • Sistemas de agendamento

  • Relatórios automáticos

  • Registro de logs

  • Integrações com APIs

Com os conceitos deste artigo, você já consegue:

  • Obter datas e horas atuais

  • Criar datas e horas personalizadas

  • Realizar cálculos com datas

  • Lidar com fusos horários

  • Formatar datas para exibição amigável

Agora é hora de praticar! Experimente criar uma aplicação que:

  • Conte os dias restantes para o próximo feriado

  • Gere logs com timestamps

  • Automatize relatórios semanais

Comentários

Postagens mais visitadas deste blog

Laços de Repetição em Python: Conceitos e Exemplos Práticos

Manipulação de Arquivos no C#: Como Ler, Escrever e Trabalhar com Arquivos de Forma Simples

Como Instalar o Xamarin com C#: Passo a Passo Completo