Como converter String para Datetime em Python
Publicados: 2022-12-20A conversão de um tipo de dados para outro tipo de dados é crucial em qualquer linguagem de programação. Quase todas as linguagens de programação oferecem suporte a conversões de tipo para tipos de dados integrados.
Tipos de dados personalizados como datetime precisam de módulos extras para conversões. Precisamos de módulos, especialmente para conversões de datetime
e hora, pois trabalhar com eles nunca foi fácil para os programadores. Felizmente, o python possui módulos integrados para trabalhar com datetime.
Aprenderemos como converter uma string datetime
em um objeto datetime
em Python usando diferentes módulos. Antes de entrarmos nisso, vamos ver por que precisamos convertê-lo em primeiro lugar.
Por que precisamos converter uma string de data e hora em um objeto de data e hora?
Quando temos que trabalhar com datas, não é fácil trabalhar se estiverem no formato string. Convertê-los para o formato de data e hora facilita muito o trabalho com eles. Datas em strings são como strings normais. Não terá nenhum método especial para trabalhar com datas. Ele terá métodos de string gerais, dos quais não precisaremos ao trabalhar com datas.
Digamos que temos que comparar duas datas. Se estiverem no formato string, podemos compará-los corretamente. Se estiverem no formato de datetime
e hora, podemos usar os operadores de comparação como números.
Este é apenas um cenário em que a conversão para o formato de datetime
e hora facilita as coisas. Existem muitos cenários, como adicionar datas, subtrair, lidar com fusos horários, etc., onde converter string de datetime
e datetime
em objeto de data e hora torna nossas vidas mais fáceis do que nunca.
Com isso dito, vamos ver diferentes maneiras de converter uma string de datetime
e hora em um objeto de datetime
e hora. Usaremos módulos integrados datetime
e dateutil
de terceiros para converter a string datetime
em objeto datetime
. Vamos começar com o módulo datetime
Usando data e hora
O datetime
é um módulo embutido do Python que é usado para trabalhar com datas e horas. Há muitas aulas neste módulo que nos ajudam a trabalhar com datas e horas. Estaremos usando a classe datetime.datetime
para a conversão.
O datetime.datetime
tem muitos métodos. Estamos interessados no método strptime
que nos ajudará na conversão. Vamos verificar.
datetime.strptime
O método datetime.strptime
é usado para converter a string datetime
em um objeto datetime
. São necessárias duas strings, uma é a string de datetime
e hora e a outra é o formato dessa string de datetime
e hora. E retorna o objeto datetime
.
Vamos ver um exemplo
from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))
Se você executar o código acima, verá a seguinte saída.
2022-12-19 21:37:56
Pegamos uma string de datetime
e hora e a convertemos em um objeto de datetime
e hora usando o método datetime.strptime
. Certifique-se de que o formato que você está fornecendo ao método corresponda exatamente à string de datetime
e hora. Se eles não corresponderem, você poderá receber um erro ou uma saída incorreta.
Usamos alguns códigos de formatação para o formato de datetime
e hora. Você pode consultar todos os códigos de formato nos documentos.
O método datetime.strptime
retorna datetime
completo. Se você deseja obter a data e a hora separadamente, podemos usar os métodos de data e time
do objeto datetime
. Vamos ver o código.
from datetime import datetime string = "19-12-2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" ## getting date separately print("Date:", datetime.strptime(string, formatting).date()) ## getting time separately print("Time:", datetime.strptime(string, formatting).time())
Execute o código acima e você verá a seguinte saída.
Date: 2022-12-19 Time: 21:37:56
Os métodos date
e time
retornarão seus objetos respectivamente. Eles terão novamente seus respectivos métodos para datas e horários.
Fornecemos as strings e formatos corretos para o método datetime.strptime
que vimos acima. Se não os fornecermos corretamente, obteremos erros. Vamos ver como lidar com esses erros. Execute o seguinte código.
from datetime import datetime string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting))
O código acima gerará um erro porque a formatação não corresponde à string de datetime
e hora. Para lidar com esses tipos de erros, podemos usar o try-except do Python. Vamos adicioná-lo.
from datetime import datetime try: string = "19:12:2022 09:37:56 PM" formatting = "%d-%m-%Y %I:%M:%S %p" print(datetime.strptime(string, formatting)) except ValueError as error: print(error)
Agora, execute o código novamente. Você verá a seguinte mensagem de erro sem quebrar o código.
time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'
Da mesma forma, podemos adicionar try-except para o próximo método parser.parse
. Isso nos ajuda a evitar quebrar o código no meio. Isso não está especialmente relacionado ao contexto deste tutorial, mas irá lembrá-lo de usá-lo em seu código.
Isso é tudo para o módulo datetime
. Vamos para o próximo módulo dateutil
.
Usando dateutil
O módulo dateutil
fornece extensões para o módulo datetime
. Facilita muito o trabalho com datas e horas com muitos métodos de fácil uso. Vamos instalar o módulo com o seguinte comando.
pip install python-dateutil
O método que nos interessa é dateutil.parser.parse
. Vamos ver como converter uma string de datetime
e datetime
em um objeto de data e hora.
parser.parse
O método parser.parse
uma string de datetime
e hora e a converterá em um respectivo formato de objeto de datetime
e hora. Não precisamos fornecer nenhuma formatação para esse método. Ele converterá automaticamente a string de datetime
e hora fornecida em um objeto de datetime
e hora. Vejamos um exemplo.
from dateutil import parser string = "19-12-2022 09:37:56 PM" print(parser.parse(string))
Se você executar o código acima, verá a seguinte saída.
2022-12-19 21:37:56
A sequência de datetime
e hora deve estar em um formato específico aceito pelo método parser.parse
. Ele lançará um erro se o formato da string de datetime
e hora não estiver de acordo com o formato desejado. Você pode verificar todos os formatos de sequência de data e hora que ele aceita para conversões automáticas.
Como o método parser.parse
retorna o objeto datetime
, podemos acessar os objetos date
e time
separadamente como vimos com o módulo datetime
. Vamos ver o código.
from dateutil import parser string = "19-12-2022 09:37:56 PM" print("Date:", parser.parse(string).date()) print("Time:", parser.parse(string).time())
Você pode ver a saída abaixo se executar o código acima.
Date: 2022-12-19 Time: 21:37:56
Como você pode ver, dateutil
torna mais fácil trabalhar comparativamente com as datas e horas. Você pode explorar o módulo nos documentos.
Conclusão
Usamos um módulo interno e um módulo de terceiros para converter a string de datetime
e hora em um objeto DateTime. Há outro módulo embutido chamado time
com o qual podemos converter a string datetime
em um objeto DateTime semelhante aos módulos datetime
e dateutil
. Tente você mesmo. Não será difícil, pois você já fez algo semelhante com outros módulos.
Pode haver mais bibliotecas com as quais podemos conseguir a mesma coisa. Os módulos que usamos no tutorial de coisas são padrão e amplamente utilizados. Você pode explorar mais sobre outros módulos e escolher o que melhor se adapta a você.
Você também pode explorar como calcular a diferença de tempo em python.
Codificação feliz