Como converter uma string para um objeto datetime ou time em Python

Introdução

Os módulos Python datetime e time ambos incluem um método de classe strptime() para converter strings em objetos.

Neste artigo, você usará strptime() para converter strings em objetos datetime e struct_time().

Implante suas aplicações Python do GitHub usando Plataforma de Aplicativos DigitalOcean. Deixe a DigitalOcean cuidar do dimensionamento de sua aplicação.

Convertendo uma string em um objeto datetime usando datetime.strptime()

A sintaxe para o método datetime.strptime() é:

datetime.strptime(date_string, format)

O método datetime.strptime() retorna um objeto datetime que corresponde à date_string analisada pelo formato. Ambos os argumentos são obrigatórios e devem ser strings.

Para detalhes sobre as diretivas de formato usadas em datetime.strptime(), consulte os Códigos de Formato de strftime() e strptime() na documentação do Python.

Converter String para Objeto datetime.datetime() Exemplo

O exemplo a seguir converte uma string de data e hora em um objeto datetime.datetime() e imprime o nome da classe e o valor do objeto resultante:

from datetime import datetime

datetime_str = '09/19/22 13:55:26'

datetime_object = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')

print(type(datetime_object))
print(datetime_object)  # impresso no formato padrão

A saída é:

<class 'datetime.datetime'>
2022-09-19 13:55:26

Converter String para Objeto datetime.date() Exemplo

O exemplo a seguir converte uma string de data em um objeto datetime.date() e imprime o tipo da classe e o valor do objeto resultante:

from datetime import datetime

date_str = '09-19-2022'

date_object = datetime.strptime(date_str, '%m-%d-%Y').date()
print(type(date_object))
print(date_object)  # impresso no formato padrão

A saída é:

<class 'datetime.date'>
2022-09-19

Converter String para Objeto datetime.time() Exemplo

O exemplo a seguir converte uma string de tempo em um objeto datetime.time() e imprime o tipo de classe e o valor do objeto resultante:

from datetime import datetime

time_str = '13::55::26'
time_object = datetime.strptime(time_str, '%H::%M::%S').time()
print(type(time_object))
print(time_object)

A saída é:

<class 'datetime.time'>
13:55:26

Converter String em Objeto datetime.datetime() com Exemplo de Localidade

O exemplo a seguir converte uma string de data em formato de localidade alemã em um objeto datetime.datetime() e imprime o tipo de classe e o valor do objeto resultante:

from datetime import datetime
import locale

locale.setlocale(locale.LC_ALL, 'de_DE')
date_str_de_DE = '16-Dezember-2022 Freitag'  # localidade de_DE
datetime_object = datetime.strptime(date_str_de_DE, '%d-%B-%Y %A')
print(type(datetime_object))
print(datetime_object)

A saída é:

<class 'datetime.datetime'>
2022-12-16 00:00:00

Observe que o objeto resultante não inclui o nome do dia da semana da string de entrada, porque um objeto datetime.datetime() inclui o dia da semana apenas como um número decimal.

Convertendo uma String em um Objeto struct_time() Usando time.strptime()

A sintaxe para o método time.strptime() é:

time.strptime(time_string[, format])

O método time.strptime() retorna um objeto time.struct_time() que corresponde à time_string analisada pelo formato fornecido. A time_string é obrigatória e ambos os argumentos devem ser strings. Se formato não for fornecido, o padrão é:

'%a %b %d %H:%M:%S %Y'

Isso corresponde ao formato retornado pela função ctime().

As diretivas de formato são as mesmas para time.strptime() e time.strftime(). Saiba mais sobre as diretivas de formato para o módulo time na documentação do Python.

Converter String em Objeto struct_time() Com Exemplo de Formato Fornecido

O exemplo a seguir converte uma string de tempo em um objeto time.struct_time() fornecendo o argumento formato, e imprime o valor do objeto resultante:

import time

time_str = '11::33::54'
time_obj = time.strptime(time_str, '%H::%M::%S')
print("A time.struct_time object that uses the format provided:")
print(time_obj)

A saída é:

A time.struct_time object that uses the format provided:
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1,
tm_hour=11, tm_min=33, tm_sec=54, tm_wday=0, tm_yday=1,
tm_isdst=-1)

Como mostrado na saída, quando você converte uma string em um objeto time.struct_time(), o método strptime() usa valores de espaço reservado para quaisquer diretivas de formato que não estão definidas no argumento formato.

Converta uma String para um Objeto struct_time() Usando o Formato Padrão Exemplo

Se você não fornecer um argumento de formato ao converter uma string de tempo em um objeto time.struct_time(), então o formato padrão é usado e ocorre um erro se a string de entrada não corresponder exatamente ao formato padrão de:

 '%a %b %d %H:%M:%S %Y'

O exemplo a seguir converte uma string de tempo em um objeto time.struct_time() sem nenhum argumento de formato fornecido, e imprime o valor do objeto resultante:

import time

# formato padrão - "%a %b %d %H:%M:%S %Y"
time_str_default = 'Mon Dec 12 14:55:02 2022'
time_obj_default = time.strptime(time_str_default)
print("A time.struct_time object that uses the default format:")
print(time_obj_default)

A saída é:

A time.struct_time object that uses the default format:
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=12,
tm_hour=14, tm_min=55, tm_sec=2, tm_wday=0, tm_yday=346,
tm_isdst=-1)

Conforme mostrado na saída, ao converter uma string em um objeto time.struct_time(), o método strptime() usa valores de espaço reservado para quaisquer diretivas de formato que não estejam definidas no argumento de formato ou pelo formato padrão se nenhum formato for fornecido.

Resolução de Problemas de Erros do strptime()

Se a string de entrada não puder ser analisada por strptime() usando o formato fornecido, será gerado um ValueError. Você pode usar o bloco try para testar erros de análise, juntamente com o bloco except para imprimir os resultados. As mensagens de ValueError que você obtém ao usar o método strptime() explicam claramente as causas raiz dos erros de análise. O exemplo a seguir demonstra alguns erros comuns, como dados extras e incompatibilidade de formato:

from datetime import datetime
import time

datetime_str = '09/19/18 13:55:26'

try:
    datetime_object = datetime.strptime(datetime_str, '%m/%d/%y')
except ValueError as ve1:
    print('ValueError 1:', ve1)

time_str = '99::55::26'

try:
    time_object = time.strptime(time_str, '%H::%M::%S')
except ValueError as ve2:
    print('ValueError 2:', ve2)

A saída é:

ValueError 1: unconverted data remains:  13:55:26
ValueError 2: time data '99::55::26' does not match format '%H::%M::%S'

Conclusão

Neste tutorial, você converteu strings de data e hora em objetos datetime e time usando Python. Continue aprendendo com mais tutoriais de Python.

Source:
https://www.digitalocean.com/community/tutorials/python-string-to-datetime-strptime