Python: Datas e Horários

Última atualização: 2026-09-22

Lidar com datas e horas é uma das tarefas mais comuns na programação — registrar timestamps de log, calcular dias de empréstimo, agregar dados ao longo de períodos de tempo... O módulo datetime é a forma padrão do Python de trabalhar com datas e horas.


1. Obtendo a Hora Atual

PYTHON
from datetime import datetime, date, time

# Data e hora atuais
now = datetime.now()
print(now)                      # 2026-06-23 16:00:00.123456

# Data atual
today = date.today()
print(today)                    # 2026-06-23

# Criar uma data específica
d = datetime(2026, 6, 23, 15, 30, 0)
print(d)                        # 2026-06-23 15:30:00

▶ Exemplo: Lembrete de Aniversário (Dificuldade ⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Function defined successfully


2. Formatação e Análise

PYTHON
from datetime import datetime

# Data -> string (formatação)
now = datetime.now()
print(now.strftime("%Y-%m-%d"))              # 2026-06-23
print(now.strftime("%H:%M:%S"))              # 16:00:00
print(now.strftime("%A"))                    # Tuesday

# String -> data (análise)
date_str = "2026-06-23 15:30:00"
parsed = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(parsed)                                # 2026-06-23 15:30:00
Código de Formato Significado Exemplo
%Y Ano com 4 dígitos 2026
%m Mês com 2 dígitos 06
%d Dia com 2 dígitos 23
%H Hora (formato 24h) 15
%M Minuto 30
%S Segundo 00
%A Nome completo do dia da semana Tuesday
💡 strftime é "data -> string", strptime é "string -> data". Lembre-se: "f" = format (saída), "p" = parse (entrada).



3. timedelta: Diferenças de Tempo

PYTHON
from datetime import datetime, timedelta

now = datetime.now()

# Calcular tempos futuros/passados
future = now + timedelta(days=7)
past = now - timedelta(days=30)

print(f"Em 7 dias: {future.strftime('%Y-%m-%d')}")
print(f"30 dias atrás: {past.strftime('%Y-%m-%d')}")

# Cálculo de tempo
print(timedelta(days=7))                     # 7 days, 0:00:00
print(timedelta(hours=3, minutes=15))        # 3:15:00
print(timedelta(weeks=2))                    # 14 days, 0:00:00

# Subtrair duas datas
d1 = datetime(2026, 6, 1)
d2 = datetime(2026, 6, 23)
diff = d2 - d1
print(f"Diferença: {diff.days} dias")       # Diferença: 22 dias

▶ Exemplo: Lembrete de Expiração de Assinatura (Dificuldade ⭐⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
=== Verificação de Expiração de Assinatura ===

▶ Exemplo: Calculadora de Prazo de Projeto (Dificuldade ⭐)

▶ Experimente

Saída (varia conforme a data):

TEXT 📖 Somente leitura
=== Contagem Regressiva de Projetos ===
Ativo (Trabalho de Curso): 22 dias restantes
Ativo (Projeto de Formatura): 127 dias restantes
Urgente (Relatório de Estágio): apenas 10 dias restantes!

Daqui a 30 dias: 09 de September de 2026


4. Casos de Uso Comuns


❓ Perguntas Frequentes

P datetime.now() retorna hora local ou UTC?
R Hora local. Use datetime.utcnow() para UTC. Note que utcnow() retorna um datetime naive sem informação de fuso horário. Para produção, use datetime.now(timezone.utc) ou pytz/zoneinfo para manipulação adequada de fuso horário.
P O que acontece se a análise strptime falhar?
R Levanta ValueError — "time data 'xxx' does not match format '%Y-%m-%d'". Coloque em try-except para lidar com erros. Armadilha comum: meses e dias devem ter dois dígitos (%m não corresponde a "6", precisa de "06").
P Qual o máximo de dias suportado por timedelta?
R Teoricamente sem limite superior — timedelta(days=1000000) é válido. No entanto, total_seconds() pode transbordar. Para uso diário, o intervalo não é uma preocupação.

📖 Resumo



📝 Exercícios

  1. Iniciante (Dificuldade ⭐): Exiba a hora atual nestes formatos: 2026-06-23 Tuesday, 2026-06-23 16:00, 06/23/2026.

  2. Intermediário (Dificuldade ⭐⭐): Escreva uma função dias_uteis_entre(inicio, fim) que calcula quantos dias úteis (segunda a sexta) existem entre duas datas. Dica: Use timedelta para iterar cada dia; use weekday() para verificar o dia da semana (0=segunda, 4=sexta).

  3. Avançado (Dificuldade ⭐⭐⭐): Escreva um "Temporizador Pomodoro." Trabalhe 25 minutos -> descanse 5 minutos, repita 4 vezes, depois faça uma pausa longa de 15 minutos. Use time.sleep() para temporização e datetime para exibir a fase atual e o tempo restante.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%