Como converter uma string para um objeto de data e hora 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 focar em dimensionar 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 à string de data 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 strftime() e strptime() na documentação do Python.

Exemplo de Conversão de String para Objeto datetime.datetime()

O seguinte exemplo 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

O resultado é:

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

Exemplo de Conversão de String para Objeto datetime.date()

O seguinte exemplo 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

O resultado é:

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

Exemplo de Conversão de String para Objeto datetime.time()

O seguinte exemplo 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 seguinte exemplo converte uma string de data 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'  # de_DE localidade
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 para 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 à string_tempo analisada pelo formato. A string_tempo é necessá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 Formato Fornecido Exemplo

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)

O resultado é:

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)

Conforme mostrado no resultado, 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 formato.

Converter String para Objeto struct_time() Usando 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)

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

Solucionando Erros de strptime()

Se a string de entrada não puder ser analisada pelo strptime() usando o formato fornecido, então um ValueError é gerado. Você pode usar o bloco try para testar os erros de análise, juntamente com o bloco except para imprimir os resultados. As mensagens de ValueError que você recebe ao usar o método strptime() explicam claramente as causas raiz dos erros de análise. O seguinte exemplo 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