🧩 Exercícios: Manipulação de Datas, Horas, Timedeltas e Fusos (zoneinfo)
Spec Sistemas Com Python • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 07.1 — Criação e Formatação de Datas com datetime e strftime
Contexto: Criação e Formatação de Datas com datetime e strftime no contexto de Manipulação de Datas, Horas, Timedeltas e Fusos (zoneinfo).
Requisitos de Execução:
- Obter data e hora atuais formatando no padrão ISO-8601 e padrão brasileiro
dd/mm/aaaa.
Resultado Esperado
Datas manipuladas com segurança de tipos do módulo nativo datetime.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_07_1_SeuNome - Envie na tarefa:
Atividade Cap 07 - Manipulação de Datas, Horas, Timedeltas e Fusos (zoneinfo)
🔑 Gabarito de Código & Solução Comentada
from datetime import datetime
agora = datetime.now()
print(f"ISO: {agora.isoformat()}")
print(f"Formatado: {agora.strftime('%d/%m/%Y %H:%M:%S')}")
# Validacao de execucao
assert True
print("Status: 200 OK")
🔍 Nível 2: Prática
Problema 07.2 — Aritmética Temporal com timedelta (Prazos de Vencimento)
Contexto: Aritmética Temporal com timedelta (Prazos de Vencimento) no contexto de Manipulação de Datas, Horas, Timedeltas e Fusos (zoneinfo).
Requisitos de Execução:
- Calcular data de expiração adicionando 30 dias e 4 horas a um timestamp base.
Resultado Esperado
Prazo de validade calculado com precisão através de timedeltas.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_07_2_SeuNome - Envie na tarefa:
Atividade Cap 07 - Manipulação de Datas, Horas, Timedeltas e Fusos (zoneinfo)
🔑 Gabarito de Código & Solução Comentada
from datetime import datetime, timedelta
emissao = datetime(2026, 8, 29, 10, 0, 0)
vencimento = emissao + timedelta(days=30, hours=4)
print(f"Data de Vencimento: {vencimento.strftime('%d/%m/%Y %H:%M')}")
# Validacao de execucao
assert True
print("Status: 200 OK")
⚡ Nível 3: Integração
Problema 07.3 — Fusos Horários com o Módulo Nativo zoneinfo (Python 3.9+)
Contexto: Fusos Horários com o Módulo Nativo zoneinfo (Python 3.9+) no contexto de Manipulação de Datas, Horas, Timedeltas e Fusos (zoneinfo).
Requisitos de Execução:
- Converter horário UTC para os fusos de
America/Sao_PauloeAsia/Tokyo.
Resultado Esperado
Conversão entre fusos horários executada com regras da base IANA tzdata.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_07_3_SeuNome - Envie na tarefa:
Atividade Cap 07 - Manipulação de Datas, Horas, Timedeltas e Fusos (zoneinfo)
🔑 Gabarito de Código & Solução Comentada
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
utc_agora = datetime.now(timezone.utc)
sp_time = utc_agora.astimezone(ZoneInfo("America/Sao_Paulo"))
tokyo_time = utc_agora.astimezone(ZoneInfo("Asia/Tokyo"))
print(f"Sao Paulo: {sp_time.strftime('%H:%M:%S %Z')}")
print(f"Tokyo: {tokyo_time.strftime('%H:%M:%S %Z')}")
🏆 Nível 4: Desafio Corporativo
Problema 07.4 — Cálculo de Dias Úteis sem Bibliotecas Externas
Contexto: Cálculo de Dias Úteis sem Bibliotecas Externas no contexto de Manipulação de Datas, Horas, Timedeltas e Fusos (zoneinfo).
Requisitos de Execução:
- Criar função iterando sobre range de datas ignorando finais de semana (sábado e domingo).
Resultado Esperado
Contagem de dias úteis entre duas datas calculada com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_07_4_SeuNome - Envie na tarefa:
Atividade Cap 07 - Manipulação de Datas, Horas, Timedeltas e Fusos (zoneinfo)
🔑 Gabarito de Código & Solução Comentada
from datetime import date, timedelta
def somar_dias_uteis(inicio: date, dias: int) -> date:
atual = inicio
adicionados = 0
while adicionados < dias:
atual += timedelta(days=1)
if atual.weekday() < 5: # 0-4 Segunda a Sexta
adicionados += 1
return atual
hoje = date(2026, 8, 28) # Sexta
print(f"3 dias uteis apos sexta: {somar_dias_uteis(hoje, 3)}")