Introducción
Los módulos datetime y time de Python incluyen un método de clase strptime() para convertir cadenas en objetos.
En este artículo, utilizará strptime() para convertir cadenas en objetos de fecha y hora y struct_time().
Convierte una cadena en un objeto de fecha y hora usando datetime.strptime()
La sintaxis del método datetime.strptime() es la siguiente:
datetime.strptime(date_string, format)
El método datetime.strptime() devuelve un objeto datetime que corresponde a la cadena de fecha analizada por el formato. Ambos argumentos son obligatorios y deben ser cadenas.
Para obtener más detalles sobre los comandos de formato utilizados en datetime.strptime(), consulte los códigos de formato strftime() y strptime() en la documentación de Python.
Ejemplo de conversión de cadena a objeto datetime.datetime()
El siguiente ejemplo convierte una cadena de fecha y hora en un objeto datetime.datetime() e imprime el nombre de la clase y el valor del 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) # printed in default formatLa salida es:
<class 'datetime.datetime'>
2022-09-19 13:55:26Ejemplo de conversión de cadena a objeto datetime.date()
El siguiente ejemplo convierte una cadena de fecha en un objeto datetime.date() e imprime el tipo de clase y el valor del 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) # printed in default formatLa salida es:
<class 'datetime.date'>
2022-09-19Ejemplo de conversión de cadena a objeto datetime.time()
El siguiente ejemplo convierte una cadena de tiempo en un objeto datetime.time() e imprime el tipo de clase y el valor del 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)La salida es:
<class 'datetime.time'>
13:55:26Convierte una cadena a datetime.datetime() con un ejemplo local
El siguiente ejemplo convierte una cadena de fecha local alemana en un objeto datetime.datetime() e imprime el tipo de clase y el valor del 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 locale
datetime_object = datetime.strptime(date_str_de_DE, '%d-%B-%Y %A')
print(type(datetime_object))
print(datetime_object)La salida es:
<class 'datetime.datetime'>
2022-12-16 00:00:00Tenga en cuenta que el objeto resultante no incluye el nombre del día de la semana de la cadena de entrada, porque el objeto datetime.datetime() incluye el día de la semana solo como un número decimal.
Convierte una cadena en un objeto struct_time() usando time.strptime()
La sintaxis del método time.strptime() es la siguiente:
time.strptime(time_string[, format])
El método time.strptime() devuelve un objeto time.struct_time() que corresponde a la cadena de tiempo analizada por el formato. Time_string es obligatorio y ambos argumentos deben ser cadenas. Si no se proporciona el formato, el valor predeterminado es:
'%a %b %d %H:%M:%S %Y'
Esto coincide con el formato devuelto por la función ctime().
Los comandos de formato para time.strptime() y time.strftime() son los mismos.
Convierte una cadena en un objeto struct_time() con el formato de ejemplo proporcionado
El siguiente ejemplo convierte una cadena de tiempo en un objeto time.struct_time() proporcionando el argumento de formato e imprime el valor del 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)La salida es:
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 se muestra en la salida, cuando convierte una cadena en un objeto time.struct_time(), el método strptime() usa valores de marcador de posición para cualquier instrucción de formato que no esté definida en el argumento de formato.
Convierte una cadena en un objeto struct_time() usando el formato predeterminado
Si no proporciona un argumento de formato al convertir una cadena de tiempo a un objeto time.struct_time(), se utilizará el formato predeterminado y se producirá un error si la cadena de entrada no coincide exactamente con el formato predeterminado:
'%a %b %d %H:%M:%S %Y'
El siguiente ejemplo convierte una cadena de tiempo en un objeto time.struct_time() sin ningún argumento de formato e imprime el valor del objeto resultante:
import time
# default format - "%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)La salida es:
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 se muestra en la salida, cuando convierte una cadena en un objeto time.struct_time(), el método strptime() usa valores de marcador de posición para cualquier instrucción de formato que no esté definida en el argumento de formato o de forma predeterminada si no se proporciona ningún formato.
Solución de errores de strptime().
Si la cadena de entrada no se puede analizar con el formato proporcionado por strptime(), se genera un ValueError. Puede usar un bloque try para comprobar si hay errores de análisis, junto con un bloque else para imprimir los resultados. Los mensajes ValueError que recibe al usar el método strptime() explican claramente las principales causas de los errores de análisis. El siguiente ejemplo muestra algunos errores comunes, como datos adicionales y discrepancias 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)La salida es:
ValueError 1: unconverted data remains: 13:55:26
ValueError 2: time data '99::55::26' does not match format '%H::%M::%S'Resultado
En este tutorial, convirtió cadenas de fecha y hora en objetos de fecha y hora usando Python.









