Cómo convertir cadena a fecha y hora en Python

La conversión de un tipo de datos a otro tipo de datos es crucial en cualquier lenguaje de programación. Casi todos los lenguajes de programación admiten conversiones de tipo para tipos de datos integrados.

Los tipos de datos personalizados, como la fecha y la hora, necesitan módulos adicionales para las conversiones. Necesitamos módulos, especialmente para conversiones de fecha y hora, ya que trabajar con ellos nunca fue fácil para los programadores. Afortunadamente, Python tiene módulos incorporados para trabajar con fecha y hora.

Aprenderemos cómo convertir una cadena de fecha y hora en un objeto de fecha y hora en Python usando diferentes módulos. Antes de saltar a eso, veamos por qué necesitamos convertirlo en primer lugar.

¿Por qué necesitamos convertir una cadena de fecha y hora en un objeto de fecha y hora?

Cuando tenemos que trabajar con fechas, no es fácil hacerlo si están en formato de cadena. Convertirlos al formato de fecha y hora hace que trabajar con ellos sea muy fácil. Las fechas en cadenas son como cadenas normales. No tendrá ningún método especial para trabajar con fechas. Tendrá métodos de cadena generales, que no necesitaremos mientras trabajamos con fechas.

Digamos que tenemos que comparar dos fechas. Si están en formato de cadena, podemos compararlos correctamente. Si están en formato de fecha y hora, podemos usar los operadores de comparación como números.

Este es solo un escenario en el que la conversión al formato de fecha y hora facilita las cosas. Hay muchos escenarios como agregar fechas, restar, manejar zonas horarias, etc., donde convertir una cadena de fecha y hora en un objeto de fecha y hora nos hace la vida más fácil que nunca.

Dicho esto, veamos diferentes formas de convertir una cadena de fecha y hora en un objeto de fecha y hora. Usaremos módulos de fecha y hora incorporados y de terceros para convertir la cadena de fecha y hora en un objeto de fecha y hora. Comencemos con el módulo de fecha y hora.

Usando fecha y hora

El datetime es un módulo integrado de Python que se utiliza para trabajar con fechas y horas. Hay muchas clases en este módulo que nos ayudan a trabajar con fechas y horas. Usaremos la clase datetime.datetime para la conversión.

El datetime.datetime tiene muchos métodos. Estamos interesados ​​en el método strptime que nos ayudará en la conversión. Vamos a comprobarlo.

fechahora.strptime

El método datetime.strptime se utiliza para convertir una cadena de fecha y hora en un objeto de fecha y hora. Toma dos cadenas, una es una cadena de fecha y hora y la otra es el formato de esa cadena de fecha y hora. Y devuelve el objeto de fecha y hora.

Veamos un ejemplo

from datetime import datetime

string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))

Si ejecuta el código anterior, verá el siguiente resultado.

2022-12-19 21:37:56

Tomamos una cadena de fecha y hora y la convertimos en un objeto de fecha y hora usando el método datetime.strptime. Asegúrese de que el formato que está proporcionando al método coincida exactamente con la cadena de fecha y hora. Si no coinciden, es posible que obtenga un error o una salida incorrecta.

Hemos utilizado algunos códigos de formato para el formato de fecha y hora. Puede consultar todos los códigos de formato en los documentos.

El método datetime.strptime devuelve una fecha y hora completa. Si desea obtener la fecha y la hora por separado, podemos usar los métodos de fecha y hora del objeto de fecha y hora. Veamos el código.

from datetime import datetime

string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"

## getting date separately
print("Date:", datetime.strptime(string, formatting).date())

## getting time separately
print("Time:", datetime.strptime(string, formatting).time())

Ejecute el código anterior y verá el siguiente resultado.

Date: 2022-12-19
Time: 21:37:56

Los métodos fecha y hora devolverán sus objetos respectivamente. Volverán a tener sus respectivos métodos para fechas y horas.

Hemos proporcionado las cadenas y los formatos correctos para el método datetime.strptime que hemos visto anteriormente. Si no los proporcionamos correctamente, obtendremos errores. Veamos cómo manejar esos errores. Ejecute el siguiente código.

from datetime import datetime

string = "19:12:2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))

El código anterior generará un error porque el formato no coincide con la cadena de fecha y hora. Para manejar este tipo de errores, podemos usar el método try-except de Python. Vamos a agregarlo.

from datetime import datetime

try:
    string = "19:12:2022 09:37:56 PM"
    formatting = "%d-%m-%Y %I:%M:%S %p"
    print(datetime.strptime(string, formatting))
except ValueError as error:
    print(error)

Ahora, ejecuta el código de nuevo. Verá el siguiente mensaje de error sin descifrar el código.

time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'

Del mismo modo, también podemos agregar el método try-except for the next parser.parse. Nos ayuda a evitar romper el código en el medio. Esto no está especialmente relacionado con el contexto de este tutorial, pero le recordará usarlo en su código.

Eso es todo para el módulo de fecha y hora. Pasemos al siguiente módulo dateutil.

Usando dateutil

El módulo dateutil proporciona extensiones al módulo datetime. Hace que trabajar con fechas y horas sea mucho más fácil con muchos métodos de fácil uso. Instalemos el módulo con el siguiente comando.

pip install python-dateutil

El método que nos interesa es dateutil.parser.parse. Veamos cómo convertir una cadena de fecha y hora en un objeto de fecha y hora.

analizador.parse

El método parser.parse tomará una cadena de fecha y hora y la convertirá en un formato de objeto de fecha y hora respectivo. No necesitamos proporcionar ningún formato para este método. Convertirá automáticamente la cadena de fecha y hora dada en un objeto de fecha y hora. Veamos un ejemplo.

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print(parser.parse(string))

Si ejecuta el código anterior, verá el siguiente resultado.

2022-12-19 21:37:56

La cadena de fecha y hora debe estar en un formato particular que acepte el método parser.parse. Lanzará un error si el formato de la cadena de fecha y hora no es el formato deseado. Puede verificar todos los formatos de cadena de fecha y hora que acepta para conversiones automáticas.

Como el método parser.parse devuelve el objeto de fecha y hora, podemos acceder a los objetos de fecha y hora por separado como hemos visto con el módulo de fecha y hora. Veamos el código.

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print("Date:", parser.parse(string).date())
print("Time:", parser.parse(string).time())

Puede ver el siguiente resultado si ejecuta el código anterior.

Date: 2022-12-19
Time: 21:37:56

Como puede ver, dateutil hace que sea más fácil trabajar con fechas y horas comparativamente. Puede explorar el módulo en los documentos.

Conclusión

Hemos utilizado un módulo integrado y un módulo de terceros para convertir la cadena de fecha y hora en un objeto DateTime. Hay otro módulo integrado llamado time con el que podemos convertir la cadena de fecha y hora en un objeto DateTime similar a los módulos datetime y dateutil. Inténtalo tú mismo. No será difícil ya que ya ha hecho algo similar con otros módulos.

Puede haber más bibliotecas con las que podamos lograr lo mismo. Los módulos que hemos usado en el tutorial de cosas son estándar y ampliamente utilizados. Puede explorar más sobre otros módulos y elegir el que más le convenga.

También puede explorar cómo calcular la diferencia horaria en python.

Codificación feliz 🙂