Especialização em Sistemas com Python & POO com Type Hints • Capítulo 07


🗺️ Mapa Conceitual do Tópico

flowchart LR
    A["Timestamp UTC / ISO 8601"] --> B["datetime.now(timezone.utc)"]
    B -->|zoneinfo.ZoneInfo| C["Conversão para Fuso Horário Local (ex: America/Sao_Paulo)"]
    C -->|"timedelta(days=N)"| D["Aritmética Temporal (Vencimentos, SLAs)"]
    C -->|strftime / strptime| E["Formatação e Parsing Padronizados"]
    
    style A fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
    style B fill:#fff3e0,stroke:#ff9800,stroke-width:2px
    style C fill:#ede7f6,stroke:#7e57c2,stroke-width:2px
    style D fill:#e8f5e9,stroke:#4caf50,stroke-width:2px

📅 1. O Módulo datetime e Fusos com zoneinfo

O tratamento de tempo em sistemas corporativos deve sempre operar em modo Timezone-Aware utilizando o módulo padrão zoneinfo (PEP 615).

Componentes Chave:

  • datetime.date: Representa datas civis (ano, mês, dia).
  • datetime.time: Representa horas independentes de calendário.
  • datetime.datetime: Combina data e hora, com suporte a fuso horário.
  • datetime.timedelta: Representa durações de tempo para aritmética de datas.
  • zoneinfo.ZoneInfo("America/Sao_Paulo"): Fuso horário padrão IANA.

💻 Exemplo Prático e Tipado

"""
exemplo_07_trabalhando_com_datas_em_python.py - Agendamento de SLA e Fuso Horário
"""

from datetime import datetime, timedelta, timezone
from zoneinfo import ZoneInfo


def calcular_prazo_sla(data_abertura: datetime, horas_sla: int, fuso: str = "America/Sao_Paulo") -> datetime:
    """Calcula a data limite de atendimento respeitando o fuso horário local."""
    tz_local = ZoneInfo(fuso)
    if data_abertura.tzinfo is None:
        data_local = data_abertura.replace(tzinfo=tz_local)
    else:
        data_local = data_abertura.astimezone(tz_local)

    prazo_final = data_local + timedelta(hours=horas_sla)
    return prazo_final


if __name__ == "__main__":
    abertura = datetime.now(timezone.utc)
    prazo = calcular_prazo_sla(abertura, horas_sla=48)
    print(f"Abertura do Chamado (UTC)   : {abertura.strftime('%d/%m/%Y %H:%M:%S %Z')}")
    print(f"Prazo Limite SLA (São Paulo): {prazo.strftime('%d/%m/%Y %H:%M:%S %Z')}")

🔗 Recursos Pedagógicos do Capítulo 07

Recurso Didático Finalidade Link de Acesso
📊 Slides de Aula Apresentação visual interativa com Dark Mode e suporte a teclado Ver Slides
🧠 Quiz Formativo Teste interativo de fixação com feedback imediato por alternativa Fazer Quiz
💻 Exemplos de Código Demonstrações funcionais com Type Hints e saída no console Ver Exemplos
🧩 Exercícios em 4 Níveis Lista progressiva de fixação com gabarito em bloco colapsável Resolver Exercícios

📊 Capítulo Anterior 📚 Sumário de Tópicos ✨ Próximo Capítulo