A transformação de um tipo de dado para outro é um processo fundamental em qualquer linguagem de programação. A maioria das linguagens oferece suporte nativo para conversões entre tipos de dados básicos.
Entretanto, tipos de dados personalizados, como datas e horas, frequentemente requerem módulos adicionais para realizar essas conversões. Isso é particularmente verdadeiro quando se trata de manipulação de datas e horários, que tradicionalmente representam um desafio para programadores. Felizmente, o Python fornece módulos integrados para lidar com esse tipo de dado de maneira eficaz.
Neste artigo, exploraremos como converter uma string que representa uma data e hora em um objeto de data e hora em Python, utilizando diferentes módulos. Antes de prosseguirmos, é importante entender a necessidade dessa conversão.
Por que a conversão de string para objeto de data e hora é necessária?
Quando trabalhamos com datas, manipular informações no formato de string pode ser bastante complicado. Ao transformar strings de data em objetos de data e hora, simplificamos significativamente as operações. Datas em formato de string são tratadas como textos comuns, sem funcionalidades específicas para manipulação temporal. Isso significa que elas carecem de métodos especializados necessários para operar com datas.
Por exemplo, comparar duas datas torna-se muito mais fácil quando elas estão representadas como objetos de data e hora. Com strings, essa comparação pode ser complexa e propensa a erros. Já com objetos de data e hora, podemos utilizar operadores de comparação de forma direta, similar ao que fazemos com números.
Este é apenas um exemplo das muitas vantagens da conversão para objetos de data e hora. Outros cenários, como adicionar ou subtrair datas, lidar com fusos horários e executar cálculos temporais, também se tornam muito mais simples quando trabalhamos com o formato correto.
Agora que entendemos a importância dessa conversão, vamos analisar diferentes métodos para transformar uma string de data e hora em um objeto correspondente. Utilizaremos os módulos integrados ‘datetime’ e o módulo ‘dateutil’, um recurso de terceiros, para realizar essa conversão. Começaremos com o módulo ‘datetime’.
Utilizando o módulo datetime
O módulo ‘datetime’ é uma ferramenta nativa do Python, projetada especificamente para trabalhar com datas e horas. Dentro desse módulo, várias classes nos auxiliam em diversas operações. Para a conversão que desejamos realizar, vamos nos concentrar na classe ‘datetime.datetime’.
A classe ‘datetime.datetime’ oferece vários métodos, e o que nos interessa neste momento é o método ‘strptime’, que é ideal para realizar a conversão de string para objeto de data e hora. Vamos verificar como ele funciona.
Método datetime.strptime
O método ‘datetime.strptime’ é a chave para converter uma string de data e hora em um objeto ‘datetime’. Ele requer dois argumentos: a string que representa a data e hora e o formato dessa string. Ao processar esses argumentos, ele retorna um objeto de data e hora.
Vejamos um exemplo prático:
from datetime import datetime
string_data_hora = "19-12-2022 09:37:56 PM"
formato = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string_data_hora, formato))
Ao executar o código acima, você verá a seguinte saída:
2022-12-19 21:37:56
Nesse exemplo, convertemos uma string de data e hora em um objeto de data e hora usando o método ‘datetime.strptime’. É fundamental garantir que o formato fornecido corresponda exatamente à estrutura da string de data e hora. Caso haja incompatibilidade, poderá ocorrer um erro ou o resultado poderá ser incorreto.
Utilizamos alguns códigos de formatação específicos para definir o formato da data e hora. Você pode consultar a documentação do Python para obter a lista completa dos códigos de formato disponíveis.
O método ‘datetime.strptime’ retorna um objeto ‘datetime’ completo. Se você precisar extrair apenas a data ou a hora separadamente, podemos utilizar os métodos ‘date()’ e ‘time()’ do objeto ‘datetime’. Veja o exemplo abaixo:
from datetime import datetime
string_data_hora = "19-12-2022 09:37:56 PM"
formato = "%d-%m-%Y %I:%M:%S %p"
## Obtendo a data separadamente
print("Data:", datetime.strptime(string_data_hora, formato).date())
## Obtendo a hora separadamente
print("Hora:", datetime.strptime(string_data_hora, formato).time())
Ao executar esse código, a saída será:
Data: 2022-12-19
Hora: 21:37:56
Os métodos ‘date()’ e ‘time()’ retornam seus respectivos objetos, que podem ser ainda mais manipulados com métodos específicos de data e hora.
Anteriormente, vimos como fornecer os formatos e strings corretos para o método ‘datetime.strptime’. No entanto, se o formato fornecido não corresponder à string de data e hora, um erro será gerado. Vamos analisar como lidar com esses erros. Execute o seguinte código:
from datetime import datetime
string_data_hora = "19:12:2022 09:37:56 PM"
formato = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string_data_hora, formato))
O código acima resultará em um erro porque o formato não corresponde à string de data e hora. Para lidar com esses erros, podemos utilizar o bloco ‘try-except’ do Python. Vejamos:
from datetime import datetime
try:
string_data_hora = "19:12:2022 09:37:56 PM"
formato = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string_data_hora, formato))
except ValueError as erro:
print(erro)
Ao executar o código novamente, você verá uma mensagem de erro mais informativa, sem que o programa seja interrompido:
time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'
De maneira similar, podemos adicionar blocos ‘try-except’ para o próximo método, ‘parser.parse’, do módulo dateutil. Isso nos ajuda a evitar que o programa seja interrompido inesperadamente. Embora não esteja diretamente relacionado ao foco deste tutorial, é uma prática recomendada que pode salvar seu código de problemas futuros.
Com isso, concluímos a explicação sobre o módulo ‘datetime’. Vamos agora explorar o módulo ‘dateutil’.
Utilizando o módulo dateutil
O módulo ‘dateutil’ é uma extensão do módulo ‘datetime’. Ele simplifica significativamente a manipulação de datas e horas, oferecendo vários métodos fáceis de usar. Para instalá-lo, use o seguinte comando:
pip install python-dateutil
O método de interesse para nós é o ‘dateutil.parser.parse’. Vamos verificar como ele converte uma string de data e hora em um objeto ‘datetime’.
Método parser.parse
O método ‘parser.parse’ recebe uma string de data e hora e a transforma em um objeto ‘datetime’. A grande vantagem desse método é que não precisamos especificar o formato da string. Ele é capaz de identificar automaticamente o formato e realizar a conversão. Veja um exemplo:
from dateutil import parser
string_data_hora = "19-12-2022 09:37:56 PM"
print(parser.parse(string_data_hora))
Ao executar o código acima, a saída será:
2022-12-19 21:37:56
É importante lembrar que a string de data e hora deve seguir um formato específico, reconhecido pelo método ‘parser.parse’. Se o formato for desconhecido, um erro será gerado. Consulte a documentação para verificar os formatos aceitos para conversão automática.
Assim como o método ‘datetime.strptime’, o ‘parser.parse’ também retorna um objeto ‘datetime’. Portanto, podemos acessar separadamente os objetos de data e hora usando os métodos ‘date()’ e ‘time()’. Veja o código:
from dateutil import parser
string_data_hora = "19-12-2022 09:37:56 PM"
print("Data:", parser.parse(string_data_hora).date())
print("Hora:", parser.parse(string_data_hora).time())
A saída deste código será:
Data: 2022-12-19
Hora: 21:37:56
Como vimos, o módulo ‘dateutil’ oferece uma maneira mais simples de trabalhar com datas e horas. Você pode explorar outros recursos do módulo na documentação.
Conclusão
Neste tutorial, exploramos dois métodos para converter strings de data e hora em objetos ‘datetime’, utilizando um módulo integrado e outro de terceiros. Existe também o módulo ‘time’, também nativo do Python, que pode realizar a mesma conversão de forma semelhante. Você pode tentar utilizá-lo como exercício, pois o conceito será similar ao que já aprendemos com os módulos ‘datetime’ e ‘dateutil’.
É possível que existam outras bibliotecas capazes de realizar essa conversão, mas os módulos que apresentamos neste tutorial são bastante comuns e amplamente utilizados. Recomendamos que você explore outras opções e escolha a que melhor se adapta às suas necessidades.
Além disso, você também pode explorar métodos para calcular a diferença entre datas em Python.
Boas programações! 🙂