Blog

Postado em em 25 de junho de 2024

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?

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

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.

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

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.

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.

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.

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.

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!

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!

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