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
Link DATEPART() - https://docs.microsoft.com/pt-br/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver15
Ó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)
Função strftime: https://www.programiz.com/python-programming/datetime/strftime
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-
Comentarios