Convertendo strings em datetime com Python

No último post falamos sobre como calcular a diferença (delta) entre duas datas (datetime). Neste vou falar, de forma geral, de maneiras como converter uma string em datetime no Python.

Para algumas das operações deste post, você vai precisar do pacote python-dateutil. Se precisar instalar este pacote, utilize o PIP com o comando abaixo:

pip install python-dateutil

Tanto no Linux quanto no Windows, você (certamente) precisará de privilégios de administrador/root para executar este comando. No Linux, se estiver utilizando Python 3, altere o comando de pip pra pip3. (Não tem pip3 instalado? utilize o comando apt-get install pip3 para baixá-lo!)

No seu arquivo .py, faça as seguintes importações:

from datetime import datetime
from dateutil.parser import parse

 

Agora vamos as conversões em si…

Utilizando o método strptime da classe datetime.

Este método recebe dois parâmetros: o primeiro é a string com a data e o segundo é o formato que esta data está.

#Defining format...
datetime_in_string = "31/12/2000 - 23:59:59"

#Setting the date in a string var...
datetime_format = "%d/%m/%Y - %H:%M:%S"

#Converting string to datetime...
result = datetime.strptime(datetime_in_string, datetime_format)

O fonte acima possui 3 operações: definição de formato da data, a data em si (em uma variável do tipo string) e o processo de conversão.
Para facilitar a leitura, a data escolhida foi 31 de Dezembro de 2000 as 23h, 59min e 59 segundos. Neste caso, o formato definindo deve ser o mesmo da sua data. Se a sua string com a data não possuir os mesmos argumentos do formato, ocorrerá um erro.

Exemplo: Se a variável datetime_in_string possuir o valor “31/12/00 – 23:59:59″ ou “31/12/200 – 23:59“, você seria agraciado com uma mensagem de erro, dizendo que a data não corresponde com o formato definido. Se no formato você definiu que o ano possuirá 4 dígitos, então você deve informar o ano com 4 dígitos.

 

Utilizando o método Parse

Outra forma, que é um pouco mais rápida, mas que pode te dar uma rasteira, é utilizando o método parse.

#Defining format...
datetime_in_string = "31/12/2000 - 23:59:59"

#Converting string to datetime...
result2 = parse(datetime_in_string)
print(result2)

No fonte acima, criei a mesma variável contendo a data 31/12/2000 – 23:59:59 mas, para converter, utilizei a função parse do pacote dateutil. Esta função irá tentar adivinhar o formato da data, com base em padrões mais utilizados. Isso pode parecer prático, mas lembre-se que aqui no Brasil nós utilizamos o padrão Dia/Mes/Ano e outros lugares utilizam Mes/Dia/Ano. Isso pode gerar problema com datas tipo 05/10 (5 de Outubro ou 10 de Maio?). Preferência pessoal aqui, mas a strptime é a que gosto de utilizar.

 

Guaxinim, de onde você está tirando estes formatos para as datas?
Excelente pergunta! Se você não conhece, existe um padrão que já está definido. Abaixo estão os valores mais comuns:

Código Significado Exemplo
%d Dia do mês com dois dígitos (zero a esquerda) 05
%-d Dia do mes sem zero a esquerda 5
%m Número do mes com dois dígitos (zero a esquerda) 08
%-m Dia do mes sem zero a esquerda 8
%Y Ano com 4 digitos 2018
%y Ano com 2 digitos 18
%H Hora no formato 24h com zero a esquerda 23
%-H Hora no formato 24h sem zero a esquerda 23
%M Minutos com zero a esquerda 06
%-M Minutos zem zero a esquerda 6
%S Segundos com zero a esquerda 23
%-S Segundos sem zero a esquerda 4
%f Microsegundos como um número decimal (com 6 digitos e padding a esquerda) 000012

A lista completa se encontra (em inglês) neste link.

 

 

Estas não são as únicas formas de se fazer isso utilizando o Python, mas acredito que elas já irão ajudar você a resolver os problemas de conversão.

Se quiser, o fonte deste post está no Github!

Espero ter ajudado.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, Python and tagged , , , , , .