📊 Capítulo 07: datetime & zoneinfo Moderno
Especialização em Sistemas com Python
🗺️ Datas Conscientes vs Ingênuas (Aware vs Naive Datetime)
flowchart TD
subgraph NAIVE ["Datas Ingênuas (Naive - Inseguras em Produção)"]
N1["datetime.now()\n(Não possui tzinfo / Impossível saber se é UTC, Brasília ou Tóquio!)\nCausa desastres de agendamento em horário de verão! 🚨"]
end
subgraph AWARE ["Datas Conscientes (Aware - Padrão Corporativo)"]
A1["datetime.now(timezone.utc) / ZoneInfo('America/Sao_Paulo')\n(Possui tzinfo explícito / Conversões perfeitas sem ambiguidades!) ⚡"]
end
NAIVE -.-> |"Migrar sempre para"| AWARE
style NAIVE fill:#ffebee,stroke:#d32f2f,stroke-width:2px
style AWARE fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🎯 Slide 1: O Módulo zoneinfo (Python 3.9+)
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
# Sempre registre timestamps no banco em UTC:
agora_utc = datetime.now(timezone.utc)
# Converta apenas na exibição para o usuário:
fuso_sp = ZoneInfo("America/Sao_Paulo")
agora_sp = agora_utc.astimezone(fuso_sp)
print(agora_sp.isoformat())
🎯 Slide 2: Aritmética Temporal com timedelta
from datetime import datetime, timedelta
expiracao = datetime.now(timezone.utc) + timedelta(days=7, hours=2)
- Cálculos precisos de vencimento de tokens e janelas de expiração.
🎯 Slide 3: ISO 8601 com fromisoformat()
datetime.fromisoformat("2026-09-01T14:30:00+00:00")- Rápido, nativo e padronizado para serialização em APIs REST e filas de mensagens.
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim