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:

  1. 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)

  1. Salve o arquivo como: Atividade_07_1_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_07_2_SeuNome
  2. 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:

  1. Converter horário UTC para os fusos de America/Sao_Paulo e Asia/Tokyo.

Resultado Esperado

Conversão entre fusos horários executada com regras da base IANA tzdata.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_07_3_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_07_4_SeuNome
  2. 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)}")