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:

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:

 

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á.

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.

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.
Breno RdV
Ex-Psicólogo, com quase uma década de experiência em Recursos Humanos e Gestão de Pessoas, atual desenvolvedor e Analista de Sistemas, trabalhando com PowerBuilder, C#, PowerShell e expandindo horizontes para Python, Xamarin, PHP, Angular e (por que não?) Unity.

Comments

comments

Posted in Dev, Python and tagged , , , , , .