Ir al contenido principal

Cadena Python a DateTime: Cómo convertir cadenas en objetos DateTime

Aprende todo sobre el módulo datetime de Python en esta guía paso a paso, que abarca la conversión de cadenas a fechas y horas, ejemplos de código y errores comunes.
Actualizado 17 oct 2025  · 8 min de lectura

En Python, las cadenas son un tipo de datos común que se utiliza para representar fechas y horas, pero como científicos e ingenieros de datos, a menudo se nos exige convertir estas cadenas en objetos de fecha y hora para realizar diversas operaciones, como ordenar o comparar.

Convertir cadenas en objetos de fecha y hora puede resultar complicado, especialmente para quienes se inician en Python. Por lo tanto, en este artículo, te guiaré a través de los pasos necesarios para utilizar estos métodos y te proporcionaré ejemplos de código a lo largo del proceso. Tanto si eres un programador experimentado como si acabas de empezar tu andadura, ¡sumérgete en el mundo de los objetos de fecha y hora en Python!

Para ejecutar fácilmente todo el código de ejemplo de este tutorial, puedes crear un cuaderno de trabajo de DataLab de forma gratuita que tiene Python preinstalado y contiene todos los ejemplos de código. Para practicar más sobre cómo convertir cadenas en objetos de fecha y hora, consulta este ejercicio práctico de DataCamp.

Aprende Python desde cero

Domina Python para la ciencia de datos y adquiere habilidades muy demandadas.
Empieza a aprender gratis

Introducción al módulo datetime de Python

El módulo datetime, que viene integrado en Python, se puede utilizar siempre que necesites trabajar con fechas, horas o intervalos de tiempo para cualquier aplicación creada con Python. Proporciona clases y métodos prácticos para representar y manipular datos de fecha y hora.

Tabla 1: Resumen de clases y métodos del módulo datetime

Clase/Método Objetivo Casos de uso comunes
datetime.date Representa una fecha (año, mes, día). Cálculo de diferencias entre fechas, formato de fechas como cadenas, extracción de componentes de fechas.
datetime.time Representa una hora del día (hora, minuto, segundo, microsegundo). Comparación de horas, formato de horas como cadenas, extracción de componentes de tiempo.
datetime.datetime Representa una fecha y una hora. Combina las funciones de fecha y hora. Trabajar con datos de series temporales, extraer componentes de fecha y hora, darles formato como cadenas.
datetime.timedelta Representa la diferencia entre dos fechas u horas (duración). Añadir/restar duraciones a/de fechas u horas, calcular intervalos de tiempo.
datetime.strptime() Analiza una cadena y la convierte en un objeto de fecha y hora según un formato especificado. Conversión de cadenas en objetos de fecha y hora para su posterior manipulación y análisis.
datetime.strftime() Formatea un objeto de fecha y hora en una cadena basada en un formato especificado. Convertir objetos de fecha y hora en cadenas legibles para su visualización o presentación en informes.

Veamos las clases principales de este módulo, ya que las convertiremos en objetos de fecha y hora:

1. fecha y hora.fecha

Esta clase representa una fecha (año, mes y día) y proporciona métodos para trabajar con fechas, como calcular la diferencia entre dos fechas y dar formato a las fechas como cadenas.

Supongamos que tenemos un conjunto de datos que contiene los precios diarios de las acciones de una empresa. Podemos utilizar la clase date para extraer las fechas del conjunto de datos y generar un gráfico de los precios de las acciones a lo largo del tiempo.

Aquí tienes un fragmento de código que muestra el uso de la clase date:

from datetime import date

# create a date object representing March 1, 2023
start_date = date(2023, 3, 1)

# extract information such as the year, month, and day
year = start_date.year
month = start_date.month
day = start_date.day

# get the day of the week (Note: Monday is coded as 0, and Sunday as 6)
weekday = start_date.weekday()

# the date can be formatted as a string if needed
date_str = start_date.strftime('%Y-%m-%d')

2. datetime.time

Esta clase representa una hora del día (hora, minuto, segundo y microsegundo) y proporciona métodos para trabajar con horas, como compararlas y darles formato como cadenas.

Supongamos que tenemos un conjunto de datos que contiene la hora de finalización de una carrera; podemos utilizar la clase time para extraer las horas y los minutos de cada competidor que finaliza la carrera.

from datetime import time

# create a time object with the microsecond granularity
end_time = time(15, 45, 30, 500000)

# get the hour and minute
hour = end_time.hour
minute = end_time.minute
second = end_time.second
microsecond = end_time.microsecond

3. datetime.datetime

Esta clase representa una fecha y una hora, y proporciona métodos para trabajar con ambas. Combina la funcionalidad de las clases de fecha y hora.

Se utiliza habitualmente en tareas de análisis de datos que implican series temporales con una alta resolución temporal, como datos por hora o por minuto. Supongamos que tenemos un conjunto de datos que contiene la demanda horaria de electricidad de una ciudad. Podemos utilizar la clase datetime para extraer la fecha y la hora del conjunto de datos y generar un gráfico de la demanda de electricidad a lo largo del tiempo.

from datetime import datetime

# create a datetime object representing March 1, 2023 at 9:30 AM
start_datetime = datetime(2023, 3, 1, 9, 30)

# get the year, month, day, hour, and minute
year = start_datetime.year
month = start_datetime.month
day = start_datetime.day
hour = start_datetime.hour
minute = start_datetime.minute

4. datetime.timedelta

Esta clase representa una duración o un intervalo de tiempo y proporciona métodos para trabajar con intervalos de tiempo, como sumar o restar intervalos de tiempo a fechas u horas.

Supongamos que tenemos un conjunto de datos que contiene las horas de inicio y finalización de una serie de eventos, y queremos calcular la duración total de todos los eventos. Podemos usar la clase timedelta para calcular la duración de cada evento y sumarlos.

from datetime import timedelta

# create a timedelta object representing 3 hours and 15 minutes
event_duration = timedelta(hours=3, minutes=15)

# get the total duration in seconds
event_duration_seconds = event_duration.total_seconds()

# add the duration to a start time to get an end time
event_start_time = datetime(2023, 3, 1, 18, 15)
event_end_time = event_start_time + event_duration

En todos los casos que hemos mostrado, hemos utilizado objetos ` datetime `, pero en la práctica los datos reales suelen permanecer como cadenas. Y la conversión a un objeto datetime desbloquea todas las funcionalidades anteriores, que son muy potentes en el análisis y las aplicaciones de la ciencia de datos.

Uso de datetime.strptime() para la conversión de fecha y hora

En Python, puedes usar el método datetime.strptime() para convertir una cadena en un objeto datetime. El método ` strptime() ` toma dos argumentos: la cadena que se va a convertir y una cadena de formato que especifica el formato de la cadena de entrada.

La cadena de formato utiliza una combinación de códigos de formato para representar los distintos componentes de la fecha y la hora. Estos son algunos de los códigos de formato más utilizados:

Tabla 2: Códigos comunes de formato de fecha y hora

Código de formato Descripción Ejemplo de entrada Ejemplo de salida
%Y Año de 4 dígitos 2023 2023
%y Año de 2 dígitos 23 23
%m Mes de 2 dígitos (01-12) 03 03
%d Día del mes de 2 dígitos (01-31) 15 15
%H Hora de 2 dígitos (00-23) 14 14
%I Hora de 2 dígitos (01-12) 02 02
%M Minutos de 2 dígitos (00-59) 45 45
%S Segundos de 2 dígitos (00-59) 30 30
%f Microsegundo (000000-999999) 123456 123456
%p Por la mañana o por la tarde PM PM
%z Desfase UTC +0530 +0530
%a Nombre abreviado del día de la semana Martes Martes
%A Nombre completo del día laborable Martes Martes
%b Nombre abreviado del mes Mar Mar
%B Nombre completo del mes Marzo Marzo
%j Día del año (001-366) 074 074
%U Semana del año (domingo como primer día) 10 10
%W Semana del año (lunes como primer día) 09 09

Ahora que entendemos las directivas strptime, el proceso de convertir cadenas en objetos de fecha y hora se puede simplificar.

  • Paso 01: Analiza la cadena de fecha y hora que se puede convertir en busca de patrones que coincidan con los códigos de formato.

  • Paso 02: Crea el formato de fecha y hora a partir de las directivas strptime().

  • Paso 03: Pasa la cadena y el formato a la función y recibe el objeto como resultado.

Pongamos en práctica estos pasos.

Convertir una cadena en un formato específico a un objeto de fecha y hora

from datetime import datetime

# Example with the standard date and time format
date_str = '2023-02-28 14:30:00'
date_format = '%Y-%m-%d %H:%M:%S'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

# Example with a different format

date_str = '02/28/2023 02:30 PM'
date_format = '%m/%d/%Y %I:%M %p'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

En el primer ejemplo, tenemos una cadena que representa una fecha y hora en el formato «AAAA-MM-DD HH:MM:SS», y en el segundo ejemplo, en un formato diferente, «MM/DD/AAAA HH:MM AM/PM».

En ambos casos, después de especificar la cadena de formato correcta como segundo argumento de strptime(), se obtiene el objeto de fecha y hora correcto.

Convertir una cadena con información de zona horaria en un objeto de fecha y hora

from datetime import datetime

date_str = '2023-02-28 14:30:00+05:30'
date_format = '%Y-%m-%d %H:%M:%S%z'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

En este ejemplo, tenemos una cadena que representa una fecha y hora con información de zona horaria en el formato «AAAA-MM-DD HH:MM:SS+TZOFFSET», donde TZOFFSET es la diferencia horaria en horas y minutos con respecto al UTC. Especificamos la cadena de formato como segundo argumento de strptime(), incluyendo el código de formato %z para analizar la diferencia horaria.

Aunque la función que hemos visto anteriormente puede parecer fácil en teoría, también puede ser motivo de frustración cuando las cosas salen mal en la práctica.

Analizar fechas sin cadenas de formato utilizando dateutil

Otra opción flexible es la biblioteca dateutil, en particular la función parser.parse(). Detecta automáticamente los formatos de fecha, lo que te permite analizar cadenas sin especificar una cadena de formato.

from dateutil.parser import parse

# Automatically infers the format
date_obj = parse("March 1, 2023 9:30 AM")
print(date_obj)

Esto resulta especialmente útil cuando se trata de formatos de fecha impredecibles o inconsistentes.

Manejo de zonas horarias

Para el manejo de fechas y horas teniendo en cuenta la zona horaria, Python ofrece dos opciones populares:

  • pytz (ampliamente utilizado y compatible con versiones anteriores)

  • zoneinfo (introducido en Python 3.9, parte de la biblioteca estándar)

from datetime import datetime
from zoneinfo import ZoneInfo

# Using zoneinfo
dt = datetime(2023, 3, 1, 9, 30, tzinfo=ZoneInfo("America/New_York"))
print(dt)

# Using pytz (alternative)
import pytz
dt_pytz = datetime(2023, 3, 1, 9, 30, tzinfo=pytz.timezone("America/New_York"))
print(dt_pytz)

Estas herramientas te permiten asignar zonas horarias, convertir entre ellas y tener en cuenta automáticamente el horario de verano.

Consideraciones sobre el horario de verano

Cuando se trabaja con fechas y horas que tienen en cuenta la zona horaria, el horario de verano (DST) puede causar complicaciones, especialmente cuando los relojes se adelantan o se atrasan.

Las bibliotecas como zoneinfo y pytz gestionan automáticamente los cambios de horario de verano cuando asignas la zona horaria adecuada:

from datetime import datetime
from zoneinfo import ZoneInfo

# Before and after DST starts
before_dst = datetime(2023, 3, 12, 1, 30, tzinfo=ZoneInfo("America/New_York"))
after_dst = datetime(2023, 3, 12, 3, 30, tzinfo=ZoneInfo("America/New_York"))

print(before_dst)
print(after_dst)

Esto garantiza que los cálculos de fecha y hora sigan siendo precisos a pesar de los cambios de horario de verano.

Uso de pandas para la conversión de fechas y horas

Aunque el módulo integrado datetime de Python es muy potente, muchos científicos de datos prefieren utilizar la biblioteca pandas para las conversiones de fecha y hora debido a su simplicidad y a su capacidad para manejar columnas enteras de fechas de forma eficiente.

import pandas as pd

# Converting a column of strings to datetime objects
date_series = pd.to_datetime(['2023-02-28', '2023-03-01', '2023-03-02'])
print(date_series)

Pandas infiere automáticamente los formatos y gestiona con elegancia las inconsistencias comunes, lo que lo convierte en la opción ideal cuando se trabaja con datos tabulares.

Formateo de objetos de fecha y hora como cadenas con strftime()

Una vez que hayas convertido las cadenas en objetos de fecha y hora y hayas realizado las operaciones deseadas, es posible que necesites volver a convertirlas en cadenas. Puedes utilizar datetime.strftime() para este fin.

from datetime import datetime

now = datetime.now()
formatted = now.strftime('%Y-%m-%d %H:%M:%S')
print(formatted)

Este método te permite controlar totalmente cómo se muestra tu objeto de fecha y hora en forma de cadena.

Solución de problemas comunes de strptime()

A continuación, se indican algunos errores comunes que puedes encontrar y cómo solucionarlos:

ValueError: los datos de tiempo «date_string» no coinciden con el formato «%Y-%m-%d %H:%M:%S».

El error más común se produce cuando la cadena de entrada no coincide con la cadena de formato. Comprueba que la cadena de entrada y la cadena de formato coincidan exactamente.

import datetime

# When input has two-digit year instead of four-digit year
date_str = '23-03-01'
date_obj = datetime.datetime.strptime(date_str, '%y-%m-%d')
# Raises ValueError: time data '23-03-01' does not match format '%y-%m-%d'

# When the input has missing leading zeros for hour and minute
time_str = '8:30'
time_obj = datetime.datetime.strptime(time_str, '%H:%M')
# Raises ValueError: time data '8:30' does not match format '%H:%M'

TypeError: el argumento 1 de strptime() debe ser str, no «int».

El siguiente error común se produce cuando pasas un entero a datetime.strptime() o time.strptime() en lugar de una cadena. Asegúrate de que todos los valores que pasas a la función sean cadenas.

# Example 1: Integer instead of string
date_int = 20230301
date_obj = datetime.datetime.strptime(date_int, '%Y%m%d')
# Raises TypeError: strptime() argument 1 must be str, not int

# Example 2: List instead of string
date_list = [2023, 3, 1]
date_obj = datetime.datetime.strptime(date_list, '%Y-%m-%d')
# Raises TypeError: strptime() argument 1 must be str, not list

ValueError: quedan datos sin convertir: «:00»

Este error se produce cuando quedan caracteres sobrantes en la cadena de entrada que no coinciden con la cadena de formato. Por ejemplo, este error se producirá si la cadena de formato solo especifica el año, el mes y el día, pero la cadena de entrada también contiene la hora del día. Para solucionar este error, asegúrate de que la cadena de formato coincida con toda la cadena de entrada.

# when input string contains time of day
date_str = '2023-03-01 12:30:00'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
# Raises ValueError: unconverted data remains:  12:30:00

# When input string contains extra characters
date_str = '2023-03-01T00:00:00Z'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
# Raises ValueError: unconverted data remains: T00:00:00Z

Conclusión

Se puede afirmar con seguridad que el método ` datetime.strptime() ` proporciona una forma flexible y potente de convertir cadenas en objetos de fecha y hora en Python, y que se puede utilizar para manejar una amplia gama de formatos de fecha y hora. ¿Por qué no descargas nuestra hoja de referencia con fechas y horarios para consultarla más adelante?

Una vez comprendidas las fechas y las horas, el siguiente paso es ponerlas en práctica en un proyecto. Te recomendamos que elijas uno de estos y consolides tu aprendizaje:

Estamos de acuerdo en que los datos de fecha y hora en el mundo real son complicados, pero todo lo que necesitas es comprender los formatos y patrones que hay detrás de cada tipo de fecha y hora que tienes en tus datos y utilizar las bibliotecas que tienes de forma inteligente.

Preguntas frecuentes

¿Cómo puedes manejar cadenas con formatos de fecha mixtos en el mismo conjunto de datos?

Cuando trabajes con conjuntos de datos que incluyan formatos de fecha mixtos, puedes utilizar el módulo dateutil de Python. La función dateutil.parser.parse() es más flexible que datetime.strptime(), ya que puede detectar y analizar automáticamente una gran variedad de formatos de fecha sin necesidad de una cadena de formato predefinida:

from dateutil.parser import parse

date_str1 = '2023-03-01'
date_str2 = 'March 1, 2023'

date_obj1 = parse(date_str1)
date_obj2 = parse(date_str2)

print(date_obj1)  # Output: 2023-03-01 00:00:00
print(date_obj2)  # Output: 2023-03-01 00:00:00

¿Puedes convertir cadenas en objetos de fecha y hora teniendo en cuenta las diferentes zonas horarias?

Sí, puedes gestionar las zonas horarias utilizando la biblioteca pytz en combinación con datetime. Primero, convierte la cadena en un objeto de fecha y hora, y luego añade una zona horaria utilizando pytz.timezone():

from datetime import datetime
import pytz

date_str = '2023-03-01 14:30:00'
date_format = '%Y-%m-%d %H:%M:%S'
date_obj = datetime.strptime(date_str, date_format)

# Set time zone
timezone = pytz.timezone('US/Eastern')
date_obj_tz = timezone.localize(date_obj)

print(date_obj_tz)  # Output: 2023-03-01 14:30:00-05:00

¿Cuál es la diferencia entre datetime.strptime() y datetime.fromisoformat()?

datetime.strptime() te permite especificar una cadena de formato personalizada para analizar formatos de fecha no estándar o variados.

datetime.fromisoformat() está diseñado específicamente para analizar cadenas de fecha con formato ISO 8601 (por ejemplo, «2023-03-01T14:30:00»). Es más sencillo de usar si tus cadenas siguen estrictamente la norma ISO 8601:

from datetime import datetime

iso_date_str = '2023-03-01T14:30:00'
date_obj = datetime.fromisoformat(iso_date_str)
print(date_obj)  # Output: 2023-03-01 14:30:00

Arunn Thevapalan's photo
Author
Arunn Thevapalan
LinkedIn
Twitter

Como científico de datos senior, diseño, desarrollo e implanto soluciones de aprendizaje automático a gran escala para ayudar a las empresas a tomar mejores decisiones basadas en datos. Como escritora de ciencia de datos, comparto aprendizajes, consejos profesionales y tutoriales prácticos en profundidad.

Temas

Más información sobre Python

Curso

Manipulación de datos de series temporales en Python

4 h
67.3K
En este curso aprenderás los fundamentos del trabajo con datos de series temporales.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

blog

Cómo aprender Python desde cero en 2024: Guía del experto

Descubre cómo aprender Python, sus aplicaciones y la demanda de conocimientos de Python. Comienza hoy tu andadura en Python ​con nuestra guía completa.
Matt Crabtree's photo

Matt Crabtree

15 min

Tutorial

Tutorial de cadenas en Python

En este tutorial, aprenderás todo sobre las cadenas de Python: trocearlas y encadenarlas, manipularlas y darles formato con la clase Formatter, cadenas f, plantillas y ¡mucho más!
Sejal Jaiswal's photo

Sejal Jaiswal

Tutorial

Tutorial de Python String format()

Aprende a formatear cadenas en Python.
DataCamp Team's photo

DataCamp Team

Tutorial

Tutorial sobre cómo concatenar cadenas en Python

Aprende varios métodos para concatenar cadenas en Python, con ejemplos que ilustran cada técnica.
DataCamp Team's photo

DataCamp Team

Tutorial

Tutorial de Comparación de cadenas difusas en Python

En este tutorial, aprenderás a hacer coincidir aproximadamente cadenas y a determinar su similitud repasando varios ejemplos.
Kurtis Pykes 's photo

Kurtis Pykes

Tutorial

Conversión de tipos de datos en Python: Una guía con ejemplos

En este tutorial de Python, abordarás la conversión implícita y explícita de tipos de datos de estructuras de datos primitivas y no primitivas con la ayuda de ejemplos de código.
Sejal Jaiswal's photo

Sejal Jaiswal

Ver másVer más