Fusos horários com zoneinfo
Trabalhe com objetos datetime conscientes do fuso horário
Fusos horários com zoneinfo é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.
Datas e horas sem fuso e com fuso
Uma data e hora sem fuso horário não contém informações de fuso — ela apenas diz '14h', sem indicar qual 14h. Uma data e hora com fuso horário contém um fuso horário, então identifica um momento exato em todo o mundo.
Datas e horas com fuso evitam erros quando os usuários estão em diferentes regiões.
from datetime import datetime
naive = datetime(2026, 5, 30, 14, 0)
print(naive.tzinfo)Importando informações de fuso horário
O Python 3.9 ou posterior inclui zoneinfo na biblioteca padrão. Importe ZoneInfo e passe um nome de fuso horário IANA, como 'Europe/Istanbul' ou 'America/New_York'.
from zoneinfo import ZoneInfo
tz = ZoneInfo('Europe/Istanbul')
print(tz)Criando uma data e hora com fuso
Passe tzinfo=ZoneInfo(...) ao construir uma data e hora para torná-la ciente do fuso. Agora ela sabe exatamente a qual região pertence.
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d)
print(d.tzinfo)UTC como referência
UTC é a referência universal. Use datetime.now(ZoneInfo('UTC')) para obter a hora UTC atual com fuso. Armazenar horários em UTC é uma prática recomendada.
from datetime import datetime
from zoneinfo import ZoneInfo
utc_now = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
print(utc_now)Convertendo entre fusos horários
.astimezone(tz) converte uma data e hora com fuso para outro fuso horário, ajustando o relógio para que ela continue representando o mesmo instante.
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ist = utc.astimezone(ZoneInfo('Europe/Istanbul'))
print('UTC:', utc)
print('Istanbul:', ist)Mesmo instante, relógios diferentes
Após a conversão, os números do relógio diferem, mas o instante subjacente é idêntico. Comparar duas datas e horas com fuso compara os momentos reais, não os algarismos exibidos.
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ny = utc.astimezone(ZoneInfo('America/New_York'))
print(utc == ny)Lendo o deslocamento em relação a UTC
O método .utcoffset() retorna uma timedelta que mostra a diferença entre o fuso e UTC naquele momento — incluindo qualquer ajuste de horário de verão.
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print('Offset:', d.utcoffset())O horário de verão é tratado automaticamente
zoneinfo usa o banco de dados de fusos horários do sistema, então sabe quando o horário de verão começa e termina. O mesmo fuso pode ter deslocamentos diferentes ao longo do ano.
from datetime import datetime
from zoneinfo import ZoneInfo
winter = datetime(2026, 1, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
summer = datetime(2026, 7, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
print('Winter:', winter.utcoffset())
print('Summer:', summer.utcoffset())Associando um fuso a uma hora sem fuso
Se uma data e hora sem fuso representar um horário local conhecido, associe um fuso usando .replace(tzinfo=...). Isso a identifica sem alterar o relógio.
from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = naive.replace(tzinfo=ZoneInfo('Europe/Istanbul'))
print(aware)Evite misturar datas e horas com e sem fuso
Você não pode subtrair nem comparar uma data e hora sem fuso com uma que tenha fuso — o Python gera um TypeError. Mantenha suas datas e horas consistentes em todo o programa.
from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = datetime(2026, 5, 30, 9, 0, tzinfo=ZoneInfo('UTC'))
try:
print(aware - naive)
except TypeError as e:
print('Error:', e)Formatando com o fuso
O código %Z exibe o nome do fuso horário, e %z exibe o deslocamento numérico ao formatar uma data e hora com fuso.
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d.strftime('%Y-%m-%d %H:%M %Z %z'))Verificação rápida
Qual é a principal diferença entre uma data e hora sem fuso e uma com fuso?
Recapitulação: fusos horários
Resumo:
- Datas e horas sem fuso não têm informações de fuso; as que têm fuso carregam
tzinfo. - Use
ZoneInfo('Region/City')do módulozoneinfo. .astimezone()converte uma data e hora com fuso para outro fuso.zoneinfolida automaticamente com o horário de verão, e você nunca deve misturar datas e horas sem fuso com as que têm fuso.
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 12, 0, tzinfo=ZoneInfo('UTC'))
print(utc.astimezone(ZoneInfo('Europe/Istanbul')))Perguntas Frequentes
A aula “Fusos horários com zoneinfo” é grátis?
Sim — o texto completo de “Fusos horários com zoneinfo” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.
O que vou aprender em “Fusos horários com zoneinfo”?
Trabalhe com objetos datetime conscientes do fuso horário Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Python Academy?
Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Fusos horários com zoneinfo”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Python Academy?
Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- date, time, datetime
- Timedelta e operações aritméticas
- Formatação e análise
- Fusos horários com zoneinfo