Capítulo 07: Manipulação de Datas, Horas, Timedeltas e Fusos Horários (zoneinfo)
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 |