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