Saltar al contenido principal
InicioTutorialesPython

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

En el tutorial, aprenderás todo sobre el módulo datetime de Python. Encuentra una guía paso a paso para la conversión de cadenas a datetime, junto con ejemplos de código y errores comunes.
Actualizado ene 2024  · 9 min leer

¿Quieres llegar al núcleo y entender la codificación datetime?

Los datos de fecha y hora son un componente esencial de muchas aplicaciones de software, y manejarlos con eficacia es una habilidad crucial para los desarrolladores. 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 tenemos que convertir estas cadenas en objetos fecha-hora para realizar diversas operaciones, como ordenar o comparar.

Convertir cadenas en objetos datetime puede ser complicado, especialmente para los que no conocen Python. Así que, en este artículo, recorreremos los pasos necesarios para utilizar estos métodos y proporcionaremos ejemplos de código a lo largo del camino. Tanto si eres un desarrollador experimentado como si acabas de iniciar tu andadura, ¡vamos a sumergirnos en el mundo de los objetos datetime en Python!

Practica la conversión de cadenas a objetos datetime con este ejercicio práctico de nuestro curso. 

Run and edit the code from this tutorial online

Run Code

Introducción al módulo datetime de Python

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

Comprendamos las clases principales de este módulo, ya que las convertiremos en objetos datetime:

1. datetime.date

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 formatear 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 fecha para extraer las fechas del conjunto de datos y trazar los precios de las acciones a lo largo del tiempo.

Aquí tienes un fragmento que muestra el uso de la clase fecha:

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 comparar horas y formatear horas como cadenas.

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

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 suele utilizar en tareas de análisis de datos que implican datos de series temporales con una alta resolución temporal, como datos a nivel de hora o 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 trazar 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 intervalo de tiempo y proporciona métodos para trabajar con intervalos de tiempo, como sumar o restar intervalos de tiempo de fechas u horas.

Supongamos que tenemos un conjunto de datos que contiene las horas de inicio y fin de un conjunto de acontecimientos, y queremos calcular la duración total de todos los acontecimientos. Podemos utilizar 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 estos casos que mostramos, utilizamos objetos fecha-hora, pero en la práctica los datos del mundo real suelen permanecer como una cadena. Y la conversión a un objeto fecha-hora desbloquea todas las funcionalidades anteriores, que son potentes en el análisis y las aplicaciones de la ciencia de datos.

Convertir una cadena en un objeto datetime en Python Usando datetime.strptime()

En Python, podemos utilizar el método datetime.strptime() para convertir una cadena en un objeto datetime. El método strptime() toma dos argumentos: la cadena que hay que 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. Aquí tienes algunos de los códigos de formato más utilizados:

  • %Y: Año de 4 dígitos
  • %y: Año de 2 dígitos
  • %m: Mes de 2 dígitos (01-12)
  • %d: 2 dígitos del día del mes (01-31)
  • %H: Hora de 2 dígitos (00-23)
  • %M: Minuto de 2 dígitos (00-59)
  • %S: Segundo de 2 dígitos (00-59)

Ahora que entendemos las directivas strptime, el proceso de convertir cadenas en objetos datetime puede simplificarse.

  • Paso 01: Analiza la cadena fecha-hora que se puede convertir en busca de patrones que coincidan con los códigos de formato.
  • Paso 02: Crea el formato fecha-hora a partir de las directivas strptime().
  • Paso 03: Pasa la cadena y el formato a la función y recibe el objeto como salida.

Pongamos en práctica estos pasos.

Convertir una cadena con un formato específico en un objeto datetime

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 una 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() para recibir el objeto datetime correcto.

Convertir una cadena con información sobre la zona horaria en un objeto datetime

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 una hora con información sobre la zona horaria en el formato "AAAA-MM-DD HH:MM:SS+TZOFFSET", donde TZOFFSET es el desfase de la zona horaria en horas y minutos respecto a UTC. Especificamos la cadena de formato como segundo argumento de strptime(), incluyendo el código de formato %z para analizar el desfase horario.

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

Solución de errores comunes de strptime()

Aquí tienes algunos errores comunes que puedes encontrarte y cómo solucionarlos:

ValueError: el dato horario 'cadena_fecha' no coincide 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 coinciden 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: strptime() argumento 1 debe ser str, no 'int'

El siguiente error habitual 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 son 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 existen caracteres sobrantes en la cadena de entrada, que no coincide con la cadena de formato. Por ejemplo, este error se producirá si la cadena de formato sólo especifica el año, el mes y el día, pero la cadena de entrada también contiene la hora del día. Para depurar este error, asegúrate de que la cadena de formato coincide 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

Es seguro decir que el método datetime.strptime() proporciona una forma flexible y potente de convertir cadenas en objetos datetime en Python y puede utilizarse para manejar una amplia gama de formatos de fecha y hora. ¿Por qué no coges nuestra Ficha de Fechas y Horas para consultarla más tarde?

Tras comprender las fechas y horas, el siguiente paso es practicarlas en un proyecto. Te recomendamos que elijas uno de ellos y solidifiques 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 sabiamente las bibliotecas de que dispones.

Temas

Más información sobre Python

Course

Time Series Analysis in Python

4 hr
57.8K
In this four-hour course, you’ll learn the basics of analyzing time series data in Python.
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

tutorial

Cómo recortar una cadena en Python: Tres métodos diferentes

Aprenda los fundamentos del recorte de caracteres iniciales y finales de una cadena en Python.
Adel Nehme's photo

Adel Nehme

5 min

tutorial

Pandas Profiling (ydata-profiling) en Python: Guía para principiantes

Aprenda a utilizar la biblioteca ydata-profiling en Python para generar informes detallados de conjuntos de datos con muchas características.
Satyam Tripathi's photo

Satyam Tripathi

9 min

tutorial

Guía completa de listas vacías en Python

Aprenda las principales operaciones con listas y los casos de uso de las listas vacías en Python.
Adel Nehme's photo

Adel Nehme

5 min

tutorial

Programación funcional frente a programación orientada a objetos en el análisis de datos

Explore dos de los paradigmas de programación más utilizados en la ciencia de datos: la programación orientada a objetos y la programación funcional.
Amberle McKee's photo

Amberle McKee

15 min

tutorial

Guía paso a paso para hacer mapas en Python usando la librería Plotly

Haz que tus datos destaquen con impresionantes mapas creados con Plotly en Python
Moez Ali's photo

Moez Ali

7 min

tutorial

Tutorial de Python Seaborn Line Plot: Crear visualizaciones de datos

Descubra cómo utilizar Seaborn, una popular biblioteca de visualización de datos de Python, para crear y personalizar gráficos de líneas en Python.
Elena Kosourova's photo

Elena Kosourova

12 min

See MoreSee More