Trabalhar com datas e horas é uma das tarefas mais importantes em programação. Seja para criar sistemas de agendamento, controlar prazos ou analisar dados temporais, você precisa dominar essas operações. O Python oferece o módulo datetime que facilita muito esse trabalho.
Neste guia completo, você vai aprender tudo sobre como manipular datas e horas no Python. Vamos desde os conceitos básicos até operações avançadas, sempre com exemplos práticos que você pode usar em seus projetos.
Para complementar este conteúdo, confira este excelente vídeo da Hashtag Treinamentos que explica como trabalhar com tempo no Python:
Créditos: Hashtag Treinamentos
O que é o Módulo datetime do Python
O datetime é um módulo nativo do Python. Isso significa que você não precisa instalar nada extra para usá-lo. Ele vem junto com o Python quando você faz a instalação padrão.
Este módulo contém várias classes que ajudam a trabalhar com datas e horas. As principais são:
- date: trabalha apenas com datas (ano, mês e dia)
- time: trabalha apenas com horas (hora, minuto, segundo e microssegundo)
- datetime: combina data e hora em um único objeto
- timedelta: representa uma duração ou diferença entre datas
Como o datetime é um módulo do Python, você precisa importá-lo antes de usar. Existem diferentes formas de fazer essa importação, dependendo do que você precisa.
Como Importar o Módulo datetime
Existem três formas principais de importar módulos no Python. Cada uma tem suas vantagens e você pode escolher a que melhor se adapta ao seu código.
A primeira forma importa o módulo completo:
import datetime
data_atual = datetime.date.today()
print(data_atual)A segunda forma importa apenas classes específicas:
from datetime import date, time, datetime
data_atual = date.today()
print(data_atual)A terceira forma usa um alias (apelido) para facilitar:
import datetime as dt
data_atual = dt.date.today()
print(data_atual)Nos exemplos deste artigo, vamos usar a segunda forma por ser mais prática. Ela deixa o código mais limpo e fácil de ler.
Trabalhando com Datas usando a Classe date
A classe date é perfeita quando você precisa trabalhar apenas com datas. Ela não lida com horas, apenas com ano, mês e dia.
Criando uma Data Específica
Para criar uma data específica, você precisa passar três números inteiros: ano, mês e dia. Veja como funciona:
from datetime import date
aniversario = date(1995, 6, 15)
print(aniversario) # 1995-06-15O formato de saída padrão é sempre AAAA-MM-DD (ano-mês-dia). Este é o formato internacional ISO 8601, usado mundialmente em programação.
Obtendo a Data Atual
Para pegar a data de hoje do sistema, use o método today():
from datetime import date
hoje = date.today()
print(hoje)
print(f"Hoje é dia {hoje}")Este método é muito útil em sistemas que precisam registrar quando algo aconteceu. Por exemplo, em um sistema de vendas ou de controle de tarefas.
Acessando Partes Individuais da Data
Você pode extrair o ano, mês ou dia separadamente usando atributos simples:
from datetime import date
hoje = date.today()
ano = hoje.year
mes = hoje.month
dia = hoje.day
print(f"Ano: {ano}")
print(f"Mês: {mes}")
print(f"Dia: {dia}")Isso é especialmente útil quando você precisa fazer cálculos ou comparações com partes específicas da data. Por exemplo, verificar se um mês é dezembro ou se o dia é o último do mês.
Trabalhando com Horas usando a Classe time
A classe time trabalha exclusivamente com horários. Ela não tem informação de data, apenas de hora, minuto, segundo e microssegundo.
Criando um Horário Específico
Para criar um horário, você pode passar até quatro parâmetros:
from datetime import time
# Apenas hora e minuto
horario1 = time(14, 30)
print(horario1) # 14:30:00
# Hora, minuto e segundo
horario2 = time(14, 30, 45)
print(horario2) # 14:30:45
# Hora, minuto, segundo e microssegundo
horario3 = time(14, 30, 45, 500000)
print(horario3) # 14:30:45.500000Os valores padrão são zero. Se você não informar os segundos, eles serão 0. O mesmo vale para os microssegundos.
Acessando Componentes do Horário
Assim como com datas, você pode acessar cada parte do horário separadamente:
from datetime import time
agora = time(15, 45, 30, 250000)
print(f"Hora: {agora.hour}")
print(f"Minuto: {agora.minute}")
print(f"Segundo: {agora.second}")
print(f"Microssegundo: {agora.microsecond}")Esta funcionalidade é útil quando você precisa validar horários ou criar lógicas baseadas em horas específicas do dia.
Unindo Data e Hora com a Classe datetime
A classe datetime é a mais completa. Ela combina data e hora em um único objeto. Esta é a classe mais usada em projetos reais.
Criando um Objeto datetime Completo
Você pode criar um datetime passando até sete parâmetros:
from datetime import datetime
# Apenas data
momento1 = datetime(2024, 12, 7)
print(momento1)
# Data e hora
momento2 = datetime(2024, 12, 7, 15, 30)
print(momento2)
# Data, hora e segundos
momento3 = datetime(2024, 12, 7, 15, 30, 45)
print(momento3)
# Completo com microssegundos
momento4 = datetime(2024, 12, 7, 15, 30, 45, 500000)
print(momento4)Similar ao que vimos em funções no Python, os parâmetros têm valores padrão. Se você não informar a hora, ela será 00:00:00.
Obtendo Data e Hora Atual
Para pegar o momento exato atual, use o método now():
from datetime import datetime
agora = datetime.now()
print(agora)
print(f"Momento atual: {agora}")Este método retorna a data e hora do sistema operacional. É muito usado em logs, registros de atividades e sistemas que precisam marcar quando algo aconteceu.
Separando Data e Hora de um datetime
Você pode extrair apenas a data ou apenas a hora de um objeto datetime:
from datetime import datetime
momento = datetime.now()
so_data = momento.date()
so_hora = momento.time()
print(f"Data: {so_data}")
print(f"Hora: {so_hora}")Isso é útil quando você recebe um datetime completo mas precisa trabalhar apenas com uma parte dele.
Formatando Datas e Horas com strftime
O método strftime() transforma objetos de data e hora em strings formatadas. É essencial para mostrar datas de forma amigável ao usuário.
Principais Códigos de Formatação
Veja os códigos mais usados para formatar datas:
- %d: dia do mês (01 a 31)
- %m: mês (01 a 12)
- %Y: ano com 4 dígitos (2024)
- %y: ano com 2 dígitos (24)
- %H: hora formato 24h (00 a 23)
- %I: hora formato 12h (01 a 12)
- %M: minutos (00 a 59)
- %S: segundos (00 a 59)
- %A: nome completo do dia da semana
- %B: nome completo do mês
Exemplos Práticos de Formatação
Veja como usar esses códigos na prática:
from datetime import datetime
agora = datetime.now()
# Formato brasileiro
formato_br = agora.strftime("%d/%m/%Y")
print(f"Data BR: {formato_br}")
# Formato americano
formato_us = agora.strftime("%m/%d/%Y")
print(f"Data US: {formato_us}")
# Formato completo
formato_completo = agora.strftime("%d/%m/%Y às %H:%M:%S")
print(f"Completo: {formato_completo}")
# Com nome do dia e mês
formato_extenso = agora.strftime("%A, %d de %B de %Y")
print(f"Extenso: {formato_extenso}")O strftime() é muito flexível. Você pode combiná-lo com comandos print para exibir datas de qualquer forma que precisar.
Convertendo Strings em Datas com strptime
O método strptime() faz o contrário do strftime. Ele converte strings em objetos datetime. É muito usado quando você recebe datas em formato de texto.
Como Usar o strptime
Você precisa informar a string e o formato dela:
from datetime import datetime
# String no formato brasileiro
texto_data = "25/12/2024"
data = datetime.strptime(texto_data, "%d/%m/%Y")
print(data)
# String com hora
texto_completo = "25/12/2024 14:30:00"
momento = datetime.strptime(texto_completo, "%d/%m/%Y %H:%M:%S")
print(momento)
# String em formato diferente
texto_us = "12-25-2024"
data_us = datetime.strptime(texto_us, "%m-%d-%Y")
print(data_us)O formato precisa corresponder exatamente à string. Se a string tem barras, use barras no formato. Se tem traços, use traços.
Exemplo Prático: Sistema de Agendamento
Veja um exemplo real de como usar strptime em um sistema:
from datetime import datetime
def agendar_compromisso():
data_texto = input("Digite a data (dd/mm/aaaa): ")
hora_texto = input("Digite a hora (HH:MM): ")
data = datetime.strptime(data_texto, "%d/%m/%Y")
hora = datetime.strptime(hora_texto, "%H:%M")
# Combina data e hora
compromisso = datetime(
data.year, data.month, data.day,
hora.hour, hora.minute
)
print(f"Compromisso agendado para: {compromisso.strftime('%d/%m/%Y às %H:%M')}")
agendar_compromisso()Este código mostra como receber datas do usuário e transformá-las em objetos datetime para usar no sistema.
Calculando Diferenças com timedelta
A classe timedelta representa uma duração. Você usa ela para fazer cálculos com datas, como adicionar dias ou calcular diferenças.
Criando um timedelta
Você pode criar um timedelta especificando dias, horas, minutos ou segundos:
from datetime import timedelta
# 7 dias
uma_semana = timedelta(days=7)
print(uma_semana)
# 3 horas e 30 minutos
tempo = timedelta(hours=3, minutes=30)
print(tempo)
# Combinando vários valores
periodo = timedelta(days=10, hours=5, minutes=30, seconds=45)
print(periodo)O timedelta sempre mostra o resultado em dias, segundos e microssegundos, mas você pode usar qualquer unidade ao criar.
Somando e Subtraindo Datas
Você pode usar operadores matemáticos para manipular datas:
from datetime import datetime, timedelta
hoje = datetime.now()
# Adicionar 7 dias
proxima_semana = hoje + timedelta(days=7)
print(f"Daqui a 7 dias: {proxima_semana.strftime('%d/%m/%Y')}")
# Subtrair 30 dias
mes_atras = hoje - timedelta(days=30)
print(f"30 dias atrás: {mes_atras.strftime('%d/%m/%Y')}")
# Adicionar horas
daqui_3_horas = hoje + timedelta(hours=3)
print(f"Daqui a 3 horas: {daqui_3_horas.strftime('%H:%M')}")Esta funcionalidade é essencial em sistemas que trabalham com prazos, como e-commerce, sistemas de cobrança ou controle de projetos.
Calculando Diferença Entre Datas
Quando você subtrai duas datas, o resultado é um timedelta:
from datetime import datetime
# Duas datas diferentes
natal = datetime(2024, 12, 25)
hoje = datetime.now()
# Calcula a diferença
diferenca = natal - hoje
print(f"Faltam {diferenca.days} dias para o Natal")
print(f"Ou {diferenca.total_seconds()} segundos")O atributo days retorna apenas os dias completos. O método total_seconds() retorna tudo convertido em segundos.
Comparando Datas e Horas
Você pode comparar objetos datetime usando os operadores de comparação do Python. Isso é muito útil para validações e lógica de negócios.
Operadores de Comparação
Todos os operadores de comparação funcionam com datetime:
from datetime import datetime
data1 = datetime(2024, 1, 15)
data2 = datetime(2024, 6, 20)
hoje = datetime.now()
# Comparações simples
print(data1 < data2) # True
print(data1 > data2) # False
print(data1 == data2) # False
print(data1 != data2) # True
# Comparando com hoje
if hoje > data1:
print("data1 já passou")
if data2 > hoje:
print("data2 ainda não chegou")Exemplo Prático: Validação de Idade
Veja como usar comparações em um caso real:
from datetime import datetime, timedelta
def verificar_maioridade(data_nascimento):
hoje = datetime.now()
idade_minima = hoje - timedelta(days=18*365)
if data_nascimento <= idade_minima:
return True
return False
# Testando
nascimento = datetime(2000, 5, 10)
if verificar_maioridade(nascimento):
print("Maior de idade")
else:
print("Menor de idade")Este tipo de validação é comum em sistemas de cadastro, e-commerce e aplicações que precisam verificar idade.
Trabalhando com Timestamps
Um timestamp é um número que representa a quantidade de segundos desde 1º de janeiro de 1970. É muito usado em bancos de dados e APIs.
Convertendo datetime para Timestamp
Use o método timestamp() para converter:
from datetime import datetime
agora = datetime.now()
timestamp = agora.timestamp()
print(f"Timestamp atual: {timestamp}")
print(f"Tipo: {type(timestamp)}")O resultado é um número float que representa os segundos desde 1970.
Convertendo Timestamp para datetime
Para fazer o caminho inverso, use fromtimestamp():
from datetime import datetime
# Timestamp de exemplo
timestamp = 1702000000
# Converte para datetime
data = datetime.fromtimestamp(timestamp)
print(f"Data: {data.strftime('%d/%m/%Y %H:%M:%S')}")Isto é muito útil quando você trabalha com APIs externas ou manipula dados de planilhas que usam timestamps.
Aplicações Práticas do datetime
Agora que você conhece os conceitos, veja algumas aplicações práticas que você pode usar em seus projetos.
Sistema de Logs
Registrar eventos com data e hora é essencial:
from datetime import datetime
def registrar_log(mensagem):
agora = datetime.now()
timestamp = agora.strftime("%Y-%m-%d %H:%M:%S")
log = f"[{timestamp}] {mensagem}"
with open("log.txt", "a", encoding="utf-8") as arquivo:
arquivo.write(log + "\n")
print(log)
# Usando o sistema de log
registrar_log("Sistema iniciado")
registrar_log("Usuário fez login")
registrar_log("Erro ao conectar no banco")Calculadora de Idade
Calcule idade precisa em anos, meses e dias:
from datetime import datetime
def calcular_idade(data_nascimento):
hoje = datetime.now()
anos = hoje.year - data_nascimento.year
meses = hoje.month - data_nascimento.month
dias = hoje.day - data_nascimento.day
# Ajusta se ainda não fez aniversário
if meses < 0 or (meses == 0 and dias < 0):
anos -= 1
meses += 12
if dias < 0:
meses -= 1
dias += 30
return anos, meses, dias
# Testando
nascimento = datetime(1995, 6, 15)
anos, meses, dias = calcular_idade(nascimento)
print(f"Idade: {anos} anos, {meses} meses e {dias} dias")Contador Regressivo
Crie um contador para eventos futuros:
from datetime import datetime, timedelta
def tempo_ate_evento(data_evento, nome_evento):
agora = datetime.now()
if data_evento < agora:
return f"{nome_evento} já passou!"
diferenca = data_evento - agora
dias = diferenca.days
segundos = diferenca.seconds
horas = segundos // 3600
minutos = (segundos % 3600) // 60
return f"Faltam {dias} dias, {horas} horas e {minutos} minutos para {nome_evento}"
# Testando
ano_novo = datetime(2025, 1, 1, 0, 0, 0)
print(tempo_ate_evento(ano_novo, "Ano Novo"))Este código é muito usado em sites de eventos, lançamentos de produtos ou contadores de ofertas especiais.
Perguntas Frequentes (FAQ)
1. O que é o módulo datetime do Python?
É um módulo nativo do Python para trabalhar com datas e horas, incluindo classes para manipular e formatar informações temporais.
2. Como importar o datetime no Python?
Use import datetime para importar o módulo completo ou from datetime import date, time, datetime para classes específicas.
3. Qual a diferença entre date, time e datetime?
A classe date trabalha apenas com datas, time apenas com horas, e datetime combina ambos em um único objeto.
4. Como obter a data atual no Python?
Use date.today() para data ou datetime.now() para data e hora atuais do sistema.
5. O que é timedelta e para que serve?
Timedelta representa uma duração de tempo e é usado para fazer cálculos como adicionar dias, horas ou calcular diferenças entre datas.
6. Como formatar datas no formato brasileiro?
Use strftime("%d/%m/%Y") para formato DD/MM/AAAA ou combine com códigos de hora para incluir horário.
7. Como converter string em data no Python?
Use o método strptime() informando a string e seu formato, como datetime.strptime("25/12/2024", "%d/%m/%Y").
8. É possível comparar duas datas em Python?
Sim, você pode usar operadores como <, >, ==, != para comparar objetos date ou datetime diretamente.
9. O que é timestamp e como usar no Python?
Timestamp é o número de segundos desde 1970. Use timestamp() para converter datetime em número e fromtimestamp() para o inverso.
10. Como calcular a diferença entre duas datas?
Subtraia uma data da outra. O resultado será um objeto timedelta com a diferença em dias e segundos.








