Fuso Horário no Python e Horário de Verão no Python

Quer saber como tratar fuso horário no Python e ainda conseguir verificar se um sistema está ou não no horário de verão no Python para as suas aplicações?

Para trabalhar com fuso horário no Python, use o módulo datetime junto com zoneinfo (nativo desde o Python 3.9). Você cria datas cientes do fuso com ZoneInfo("America/Sao_Paulo"), converte entre regiões e o próprio banco de fusos cuida do horário de verão automaticamente, sem cálculos manuais de diferença de horas.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

O que você aprende neste vídeo

Resposta rápida: A aula ensina a tratar fuso horário e horário de verão no Python com datetime e pytz. Você aprende a converter texto em data com strptime(), tornar a data ciente do fuso com localize(), convertê-la para outra região com astimezone() e checar o horário de verão com dst(). Desde o Python 3.9, o zoneinfo nativo cumpre o mesmo papel.

Neste vídeo (15 min):

  • 1:10 - A biblioteca datetime já vem com o Python, e a aula a importa com from datetime import datetime
  • 2:35 - Converter o texto de uma data, 15 de fevereiro de 2024 às 10h, num objeto de data com datetime.strptime()
  • 4:50 - Montar o formato com os códigos da documentação: %d para dia, %m para mês, %Y para ano com quatro dígitos e %H para hora em 24 h
  • 6:20 - A data lida de texto sai naive, sem fuso, e precisa virar aware para saber em qual time zone está
  • 7:05 - pytz.timezone() recebe o nome do fuso como string, do UTC de Greenwich a qualquer região do mundo
  • 8:20 - Achar o identificador certo na lista List of tz database time zones, padrão compartilhado por várias linguagens e sistemas
  • 9:05 - America/Sao_Paulo é o fuso de Brasília, UTC-3, e as outras regiões do Brasil têm identificadores próprios
  • 10:30 - Aplicar o fuso à data com localize() e ver o deslocamento de -3 horas aparecer no print
  • 11:30 - Criar o fuso Europe/Paris, que é UTC+1 no horário padrão e UTC+2 no horário de verão
  • 12:05 - Converter a data para Paris com astimezone(): 10h de 15/02/2024 em São Paulo equivalem a 14h na França
  • 12:50 - Trocar a data para 15 de junho de 2024: Paris passa a 15h, cinco horas à frente, por causa do horário de verão
  • 13:35 - Perguntar se a data está em horário de verão com .dst(), de Daylight Saving Time: uma hora em junho, zero em fevereiro

Trechos do vídeo:

  • Uma data lida de texto com strptime() chega naive: ela não carrega fuso horário nenhum até ser localizada numa time zone e virar aware
  • No formato do strptime(), %y minúsculo lê o ano com dois dígitos e %Y maiúsculo, com quatro; %m minúsculo é o mês e %M maiúsculo, o minuto
  • Os nomes de fuso seguem o banco tz, a mesma referência usada por várias linguagens: America/Sao_Paulo cobre o horário de Brasília, em UTC-3, e Europe/Paris cobre a França
  • A conversão entre fusos considera a data convertida, não o dia em que o código roda: 10h de 15/02/2024 em São Paulo são 14h em Paris, e 10h de 15/06/2024 viram 15h, porque a França está no horário de verão
  • O método dst() vem de Daylight Saving Time e devolve quanto o horário de verão soma naquela data: uma hora em junho em Paris e zero em fevereiro

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Data e Hora no Python

Antes de partir para o horário de verão e fuso horário, é importante que você saiba que no Python, nós temos a biblioteca datetime, que é uma biblioteca de data e hora no Python.

Você tem duas maneiras de utilizar essas biblioteca. A mais comum é fazer o import direto da biblioteca, mas você pode importar apenas uma função específica dessa biblioteca.

Python
import datetime

from datetime import datetime

Texto para Data no Python (strptime)

Após importar a biblioteca, nós vamos dar início ao exemplo da aula de hoje! Imagine que você tenha em um texto a data escrita no formato da variável texto_data, que é um texto, só que você precisa passar isso para o formato de data para conseguir trabalhar com essa informação.

Até porque, você deve saber que não vai conseguir fazer cálculos ou tratamentos de data com essa informação no formato de texto, não é mesmo?

Para isso nós vamos utilizar o .strptime do datetime, onde você vai colocar a informação que vai fazer essa transformação e vai colocar também o formato que a data está, pois você deve saber que em programação é muito comum termos informações no formato americano.

Então é importante que você coloque essa informação corretamente para que consiga fazer essa transformação do texto para data.

Só que não é simplesmente escrever dia ou day, mês ou month… nós vamos utilizar alguns códigos para isso e você pode encontrar esses códigos no link abaixo, que é o site da documentação da biblioteca datetime na parte do strptime, que é o que estamos utilizando.

https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes

Python
from datetime import datetime

texto_data = "15/02/2024 10:00"
minha_data = datetime.strptime(texto_data, "%d/%m/%Y %H:%M")
print(minha_data)

Com esses formatos %d, %m… que você vai encontrar na documentação para que consiga fazer a transformação da forma que precisa, você vai notar que ao utilizarmos o print, o Python já vai reconhecer essa informação como uma data.

Data e hora no Python

Nesse caso você vai visualizar a data como ano/mês/dia, porque é o formato americano, mas o Python já reconhece que essa informação é um data.

Ícone PythonPython Impressionador

Você vai aprender a linguagem de Programação que mais cresce no Mundo para fazer automações incríveis, desenvolver sites, fazer análises de dados, trabalhar com Ciência de Dados, Inteligência Artificial, mesmo que você nunca tenha tido nenhum contato com Programação na vida.

Começar agoraSeta para a direita
Fundo PythonTelas Python
Luz Python

Formato de Data no Python e Horário de Verão no Python

Quando nós fazemos a transformação para o formato de data no Python, ele vem no formato naive, ou seja, é um formato que não traz a informação de onde é esse horário, se tem fuso horário ou não.

É um data crua, somente a data sem distinção da localidade. Por isso nós precisamos tornar essa informação em um data inteligente (aware) para que você tenha essa informação de localidade até para saber o fuso horário e se tem horário de verão.

Para fazer essa transformação, nós vamos precisar da biblioteca pytz (python timezone). Essa biblioteca vai poder tornar qualquer ciente do fuso horário dela e conseguir fazer a tradução desses diferentes fusos horários.

Então vamos primeiro escolher um fuso horário para atribuir a data utilizando o pytz.timezone e aqui nós vamos consultar na internet para saber quais os códigos que nós temos para atribuir o fuso horário.

Nesse caso vou deixar 2 links como exemplo para que você possa consultar essas informações.

Depois disso nós vamos precisar atribuir esse fuso horário que escolhemos a nossa data, ou seja, vamos atribuir nesse exemplo, o fuso horário “America/Sao_Paulo” que é o UTC-3 para a data que convertemos.

Python
import pytz

fuso_horario = pytz.timezone("America/Sao_Paulo")
minha_data_com_fuso = fuso_horario.localize()
print(minha_data_com_fuso)
Fuso horário no Python

Dá só uma olhada no segundo que print que temos, além da informação de data e horário, o Python mostra o fuso -3 nessa data.

Dessa forma fica muito mais fácil fazer a tradução desse fuso horário para outro, pois como agora já temos a data inteligente, vamos conseguir fazer essa troca de fusos utilizando o .astimezone.

Codigo
novo_fuso = pytz.timezone("Europe/Paris")
minha_data_novo_fuso = minha_data_com_fuso.astimezone(novo_fuso)
Fuso horário no Python

Obs.: Aqui é importante ressaltar que o fuso horário que está aparecendo na data é referente a data que estamos utilizando e não a data atual que estamos rodando o código.

Você consegue notar que agora conseguimos passar a data de 10h para 14h que é o horário que teríamos em Paris e consegue notar que o fuso dessa região é +1 ao invés de -3 que temos em algumas regiões do Brasil.

Agora eu quero te mostrar que se colocarmos uma data em junho, por exemplo, você vai notar uma diferença no fuso de Paris.

Python
from datetime import datetime

texto_data = "15/06/2024 10:00"
minha_data = datetime.strptime(texto_data, "%d/%m/%Y %H:%M")
print(minha_data)

import pytz

fuso_horario = pytz.timezone("America/Sao_Paulo")
minha_data_com_fuso = fuso_horario.localize()
print(minha_data_com_fuso)

novo_fuso = pytz.timezone("Europe/Paris")
minha_data_novo_fuso = minha_data_com_fuso.astimezone(novo_fuso)

Dá só uma olhada no resultado. Agora ao invés de termos 14h com o fuso +1, você vai notar que temos 15h com o fuso +2.

Horário de verão no Python
Timezone de Paris

Se você der uma olhada na tabela dos códigos dos fusos, vai notar que quando temos o fuso de Paris sendo +1 é o horário normal, mas quando esse fuso é +2 significa que estamos no horário de verão nessa região!

Isso quer dizer que você não precisa saber se tem horário de verão ou não naquele região para poder fazer a transformação da sua data, a biblioteca pytz já faz isso de forma automática!

Além disso, você pode simplesmente utilizar .dst na sua data para verificar se ela está ou não com horário de verão para não ter que ficar consultando uma tabela como fizemos acima.

Esse dst significa Dayligth Saving Time, que é horário de verão, dessa forma você vai saber se a data que você tem está ou não no horário de verão. Com isso tudo já fica automático!

Codigo
print(minha_data_novo_fuso.dst())
Horário de verão no Python

Para esse exemplo com adata em junho, você nota que temos 1h de horário de verão. Caso voltássemos para o exemplo de fevereiro essa informação seria igual a 0, pois não teria horário de verão!

Perguntas frequentes

1. Como converter texto para data no Python?

Use o método datetime.strptime(texto, formato), informando o texto e a máscara correspondente. Por exemplo, datetime.strptime("25/12/2026", "%d/%m/%Y") transforma a string em um objeto de data. O caminho inverso, de data para texto, é feito com strftime, usando os mesmos códigos de formatação.

2. Qual a diferença entre datetime e date no Python?

O objeto date guarda apenas data (ano, mês e dia), enquanto datetime guarda data e hora juntas, incluindo horas, minutos e segundos. Ambos vêm do módulo datetime. Para tarefas que envolvem horário, fuso ou horário de verão, você precisa do datetime, pois o date não armazena horas.

3. Como saber se uma data está no horário de verão no Python?

Com uma data ciente do fuso (usando zoneinfo), chame o método .dst(): se ele retornar um valor diferente de zero, aquela data está em horário de verão. O zoneinfo consulta o banco de fusos do sistema, então respeita as regras de cada região e ano automaticamente.

4. O que é o módulo zoneinfo do Python?

O zoneinfo é o módulo padrão do Python (a partir da versão 3.9) para trabalhar com fusos horários usando o banco de dados IANA. Com ele você associa um fuso a uma data com ZoneInfo("America/Sao_Paulo"), dispensando bibliotecas externas como a antiga pytz para a maioria dos casos.

Conclusão – Fuso Horário no Python

Nessa aula eu te ensinei sobre fuso horário no Python e horário de verão no Python, pois nem sempre você está criando um projeto para ser utilizado na sua região, então é importante que você consiga não só fazer a transição de fusos como saber se a região em questão tem ou não horário de verão.

Já imaginou se você cria um sistema que faz uma atualização ou automação com base no horário atual e não se atenta ao fato da outra região ter um fuso diferente ou até mesmo ter horário de verão?

Ainda mais se for uma aplicação que precisa ser executada em um horário específico, já pensou no problema que isso pode gerar simplesmente porque não fez a transição correta do fuso e não verificou o horário de verão?

Isso pode gerar sérios problemas, principalmente se for uma automação de empresa quue tem horários precisos para rodar.

Por mais que parece algo simples, quando estamos tratando de projetos mais complexos e importantes são esses pequenos detalhes que fazem toda a diferença, pois um erro desse pode gerar um problema enorme dentro da empresa.

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Posts mais recentes da Hashtag Treinamentos