top of page
  • Foto do escritorGabriel Quintella

Python, Trabalhando com Datas!

Fala meu amigo, tudo bem com você? É um prazer enorme ter você aqui novamente. Vamos abordar hoje um assunto que é muito utilizado quando estamos analisando dados!


O Python possui um módulo que permite realizar analises temporais. Estamos falando do módulo datetime.


Vamos iniciar nosso estudo importando o módulo datetime ou caso se preferir pode estar chamando também de biblioteca datetime. O primeiro comando é bem simples, confere ai!


import datetime

Muito bom jovem!!!!! Podemos agora começaremos a brincar com os dados.


Nesse primeiro exemplo, apresento para você duas possíveis formas de recuperar a data.


# Data completa com hora (YYYY-MM-DD HH:MM:SS.MLS)
data_hora = datetime.datetime.now()
print(data_hora)

# Apenas a data (YYYY-MM-DD)
data_sem_hora = datetime.date.today()
print(data_sem_hora)


Analisando output, no primeiro script, retornamos a data em dois formatos. No primeiro completa, com a hora e no segundo apenas a data.


Se você já ouviu falar do banco de dados da Microsoft SQL Server, é possível fazer uma analogia entre a função GETDATE() e as funções Python now() e today() para retornar a mesma informação de data e hora ou apenas data.


Caso queira apresentar a data completa, no Microsoft SQL Server usamos a função GETDATE() já no Python será a função now() e para retornar apenas a data, no Microsoft SQL Server precisamos converter a função GETDATE() para DATE e no Python usamos a função today(). Observe abaixo.


-- # Data completa com hora (YYYY-MM-DD HH:MM:SS.MLS)
SELECT GETDATE() data_hora

-- # Apenas a data (YYYY-MM-DD)
SELECT CAST(GETDATE() AS DATE) data_sem_hora

Muito bem! Com essa pequena introdução, conseguimos avançar para o próximo nível. Vamos agora destrinchar a função now() e retornar as informações referente ao Ano, o Mês e o Dia.


# Retorna o Ano
ano = data_sem_hora.year
print('ano: ' + str(ano))

# Retorna o Mês
mes = data_sem_hora.month
print('mes: ' + str(mes))

# Retorna o Dia
dia = data_sem_hora.day
print('dia: ' + str(dia))


É possível também realizar a concatenação das três variáveis e formar a data. Analisem comigo, é bem simples!


# Concatena as variáveis
ano_mes_dia = datetime.datetime(ano, mes, dia)
print('ano_mes_dia: ' + str(ano_mes_dia))

# Concatena as variáveis
ano_mes_dia = datetime.date(ano, mes, dia)
print('ano_mes_dia: ' + str(ano_mes_dia))


No Microsoft SQL Server, usamos as funções YEAR(), MONTH() e DAY() junto com a função GETDATE(). Podemos também usar a função DATEPART(), porém nessa não vou entrar em detalhes, deixarei um link para você estudar e qualquer dúvida pode enviar que terei o maior prazer em responder!


-- # Retorna o Ano
SELECT YEAR(GETDATE()) ano

-- # Retorna o Mês
SELECT MONTH(GETDATE()) mes

-- # Retorna o Dia
SELECT DAY(GETDATE()) dia






Ótimo! Mais um nível alcançado, bora pro próximo desafio!


Agora vamos extrair da nossa função as informações referente a hora. Primeiro a data completa e em seguida a hora, o minuto e segundos.


# Retorna a Hora Completa (HH:MM:SS)
hora_completa = data_hora.time()
print('hora_completa: ' + str(hora_completa))

# Retorna a Hora
hora = data_hora.hour
print('hora: ' + str(hora))

# Retorna o minuto
minuto = data_hora.minute
print('minuto: ' + str(minuto))

# Retorna o segundo
segundo = data_hora.second
print('segundo: ' + str(segundo))


E da mesma forma, traduzindo para o Microsoft SQL Server, conseguimos obter as mesmas informações com as funções FORMAT() e DATEPART().


-- # Retorna a Hora Completa (HH:MM:SS)
SELECT FORMAT(CAST(GETDATE() AS DATETIME), 'hh:mm:ss') AS 'TIME'

-- # Retorna a Hora
SELECT DATEPART(HOUR,GETDATE()) hora

-- # Retorna o minuto
SELECT DATEPART(MINUTE,GETDATE()) minuto

-- # Retorna o segundo
SELECT DATEPART(SECOND,GETDATE()) segundo

Além das possibilidades listadas acima, podemos também saber qual o dia da semana, podendo ser por extenso ou inteiro, onde 0 representa o primeiro dia da semana (domingo) e 6 o último (sábado).


Conseguimos saber também qual o mês de uma determinada data, podendo ser por extenso ou abreviado e também qual o dia do ano, qual a semana e outros.


Deixarei alguns exemplos e uma documentação para que você possa analisar as demais possibilidades.


# Qual o dia da semana (Domingo à Sábado) em Inglês
dia_semana = data_hora.strftime('%A')
print('Qual dia da semana? '+ dia_semana)

# Qual o dia da semana (0 - Domingo, 1 - Segunda até 6 - Sábado)
dia_semana_numerico = data_hora.strftime('%w')
print('dia_semana_numerico: ' + dia_semana_numerico)

# Qual o mês por extenso
mes_descricao = data_hora.strftime('%B')
print('Estamos em qual mês? '+ mes_descricao)

# Qual o dia do ano de 1 à 365 ou 366 em ano bissexto 
dia_do_ano = data_hora.strftime('%j')
print('Qual dia do Ano? ' + dia_do_ano)

# Qual o número da semana
semana_ano = data_hora.strftime('%U')
print('Qual a semana do ano? ' + semana_ano)










Seguindo a comparação com o Microsoft SQL Server, é possível obter a mesma informação da seguinte forma.


-- # Qual o dia da semana (Domingo à Sábado) em 
SELECT DATENAME(dw,GETDATE()) dia_semana

-- # Qual o dia da semana (0 - Domingo, 1 - Segunda até 6 - Sábado)
SELECT DATEPART(dw,GETDATE()) dia_semana_numerico 

-- # Qual o mês por extenso
SELECT DATENAME(month,GETDATE()) mes_descricao 

-- # Qual o dia do ano de 1 à 365 ou 366 em ano bissexto 
SELECT DATEPART(dayofyear,GETDATE()) dia_do_ano

-- # Qual o número da semana
SELECT DATEPART(WEEK,GETDATE()) semana_ano 

Uma outra abordagem muito usada consiste nas operações de adição e subtração de dia(s) e até mesmo operações entre datas. Vamos ver como que aplicamos.


# Adição de Dias em uma Data
v = 2
Data_Futura = datetime.date.fromordinal(data_sem_hora.toordinal()+v)
print('Qual será a data adicionando '+f'{str(v)}'+' dias? ' +  str(Data_Futura))

# Subtração de Dias em uma Data
Data_Passada = datetime.date.fromordinal(data_sem_hora.toordinal()-v)
print('Qual será a data subtraindo '+f'{str(v)}'+' dias? ' +  str(Data_Passada))

# Subtração entre datas (Retorno em Dias)
dif_total_em_dias = Data_Futura - Data_Passada
print('Qual a diferença entre as datas? ' + str(dif_total_em_dias))


Virando a chave pro Microsoft SQL Server, conseguimos alcançar o mesmo resultado usando as funções DATEADD() e DATEDIFF().


-- # Adição de Dias em uma Data
SELECT DATEADD(DAY, 1, GETDATE()) Data_Futura

-- # Subtração de Dias em uma Data
SELECT DATEADD(DAY, -1, GETDATE()) Data_Passada

-- # Subtração entre datas (Retorno em Dias)
SELECT DATEDIFF(DAY, DATEADD(DAY, -1, GETDATE()), DATEADD(DAY, 1, GETDATE())) dif_total_em_dias

Seguindo a nossa trilha de aprendizado, uma outra técnica que pode ser aplicada é a utilização de time zone para saber qual é a hora de um determinado local do mundo.


Em nosso exemplo, vamos precisar utilizar o método pytz. É através desse método que conseguimos listar todas as time zone existentes.


Para conhecer todas as time zone, é possível exibir a lista completa através do script a seguir.


import pytz

for tz in pytz.all_timezones:
    print(tz)

Após selecionar a time zone, podemos então busca nossa informação.


from datetime import datetime
import pytz

# Horário Local (Busca através da configuração local do computador)
local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))

# Horário Nova York
tz_NY = pytz.timezone('America/New_York') 
datetime_NY = datetime.now(tz_NY)
print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S"))

# Horário de Londres
tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))


Viu como é simples? É possível também retornar a informação de data e hora com o fuso horário.


Para isso vamos precisar utilizar o método tzlocal. Caso ele não esteja configurado em seu ambiente, basta executar o próximo script para a instalação. Eu utilizo o Jupyter Notebook e precisei realizar a instalação, é simples e rápido!


pip install tzlocal

Esse método nos permite também identificar o fuso horário no notebook que estamos executando. Para isso basta executar o script a seguir.


import tzlocal

# Identificação do Fuso Horário
tzlocal.get_localzone()

E finalmente, conseguimos alcançar nosso objetivo, retornar a data e hora como fuso horário! Segue o comando especial!


# Imprimir hora atual com fuso horário local
from datetime import datetime
import tzlocal  # pip install tzlocal

print(datetime.now(tzlocal.get_localzone()).strftime("%Y-%m-%d %H:%M:%S %z"))

# Imprimir hora atual com fuso horário específico
from datetime import datetime
import pytz

print(datetime.now(pytz.timezone('Asia/Taipei')).strftime("%Y-%m-%d %H:%M:%S %z"))


Estamos chegando perto do término do nosso post. Vamos abordar agora outras duas funções strptime() e strftime(). Vamos defini-las brevemente.


A função strptime() recebe uma string como input e onde precisa ser determinado o seu formato, já a strftime() recebe uma data como input e determina como que será o output. Analisem comigo!


# Strptime() recebe uma string como input e você determina o seu formato
date_string = "1 August, 2019"
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)
print(type(date_object))

# Strftime() recebe uma data como input e determina como que será a saída
now = datetime.now()
#year = now.strftime("%Y-%m-%d %H:%M:%S")
year = now.strftime("%Y-%B-%d %I:%M:%S.%f %p")
print(year)
print(type(year))


Bem amigo, finalizamos aqui nosso tópico sobre manipulação de datas com Python. Espero que tenham curtido e já sabem, qualquer dúvida, coloquem aqui que buscarei responder a todos.


Espero você no próximo assunto!


Deixo para você a seguir, o link da documentação oficial com mais detalhes sobre o método datetime para que você possa realizar uma estudo mais aprofundada e o notebook utilizado.


Valeu e obrigado!




Link Python Datetime - https://docs.python.org/pt-







71 visualizações0 comentário

Posts recentes

Ver tudo

Commentaires


bottom of page