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 los tipos de datos incorporados.
Los tipos de datos personalizados como datetime necesitan módulos adicionales para las conversiones. Necesitamos módulos, especialmente para las conversiones datetime
, ya que trabajar con ellas nunca ha sido fácil para los programadores. Por suerte, python tiene módulos incorporados para trabajar con datetime.
Aprenderemos cómo convertir una cadena datetime
a un objeto datetime
en Python utilizando diferentes módulos. Antes de saltar a eso, veamos por qué necesitamos convertirlo en primer lugar.
¿Por qué necesitamos convertir una cadena datetime en un objeto datetime?
Cuando tenemos que trabajar con fechas, no es fácil hacerlo si están en formato cadena. Convertirlas a formato datetime hace que trabajar con ellas 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 generales de cadenas, que no necesitaremos al trabajar con fechas.
Digamos que tenemos que comparar dos fechas. Si están en formato cadena, podremos compararlas correctamente. Si están en formato datetime
, podemos utilizar los operadores de comparación como si fueran números.
Este es sólo un escenario en el que la conversión a formato datetime
facilita las cosas. Hay un montón de escenarios como sumar fechas, descansar, manejar zonas horarias, etc., donde convertir cadena datetime
un objeto datetime
nos hace la vida más fácil que nunca.
Dicho esto, veamos diferentes formas de convertir una cadena datetime
en un objeto datetime
. Utilizaremos los módulos datetime
incorporados y dateutil
de terceros para convertir la cadena datetime
en objeto datetime
. Empecemos con el módulo datetime
Uso de datetime
El datetime
es un módulo incorporado 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. Utilizaremos la clase datetime. datetime
para la conversión.
La clase datetime. datetime
tiene muchos métodos. Nos interesa el método strptime
que nos ayudará en la conversión. Vamos a comprobarlo.
datetime.strptime
El método datetime
.strptime se utiliza para convertir una cadena datetime
en un objeto datetime
. Toma dos cadenas, una es la cadena datetime
y la otra es el formato de esa cadena datetime
. Y devuelve el objeto datetime
.
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á la siguiente salida.
2022-12-19 21:37:56
Hemos tomado una cadena datetime
y la hemos convertido en objeto datetime
utilizando el método datetime.
strptime. Asegúrese de que el formato que está proporcionando al método coincide exactamente con la cadena datetime
. Si no coinciden, entonces puede obtener un error o una salida incorrecta.
Hemos utilizado algunos códigos de formato para el formato datetime
. Puede consultar todos los códigos de formato en la documentación.
El método datetime.strptime
devuelva el datetime
completo. Si desea obtener la fecha y la hora por separado, podemos utilizar los métodos date time
del objeto datetime
. Veamos el código.
from datetime import datetime
string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
## obtener la fecha por separado
print("Fecha:", datetime.strptime(string, formatting).date())
## obtener la hora por separado
print("Hora:", datetime.strptime(string, formatting).time())
Ejecute el código anterior y verá la siguiente salida.
Fecha: 2022-12-19
Hora: 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 formatos correctos para el método datetime.strptime
que hemos visto anteriormente. Si no los proporcionamos correctamente, entonces 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 arrojará un error porque el formato no coincide con la cadena datetime
. Para manejar este tipo de errores, podemos utilizar el try-except de Python. Añámoslo.
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, vuelva a ejecutar el código. Verá el siguiente mensaje de error sin romper el código.
los datos de tiempo '19:12:2022 09:37:56 PM' no coinciden con el formato '%d-%m-%Y %I:%M:%S %p'
Del mismo modo, también podemos añadir el try-except para el método parser.parse
que viene. Esto 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á que debe utilizarlo en su código.
Eso es todo para el módulo datetime
. Pasemos al siguiente módulo dateutil
.
Uso de 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 un montón de 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 datetime
en un objeto datetime
.
parser.parse
El método parser
.parse tomará una cadena datetime
y la convertirá en un formato de objeto datetime
respectivo. No necesitamos proporcionar ningún formato para este método. Convertirá automáticamente la cadena datetime
dada en objeto datetime
. 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á la siguiente salida.
2022-12-19 21:37:56
La cadena datetime
debe estar en un formato concreto que el método parser.parse
acepte. Arrojará un error si el formato de la
cadena datetime no es la deseada. Puede comprobar todos los formatos de cadena datetime que acepta para realizar conversiones automáticas.
Como el método parser.par
se devuelve un objeto datetime
, podemos acceder a los objetos fecha
y hora
por separado como hemos visto con el módulo datetime
. Veamos el código.
from dateutil import parser
string = "19-12-2022 09:37:56 PM"
print("Fecha:", parser.parse(string).date())
print("Hora:", parser.parse(string).time())
Puede ver la siguiente salida si ejecuta el código anterior.
Fecha: 2022-12-19
Hora: 21:37:56
Como puede ver dateutil
facilita comparativamente el trabajo con las fechas y las horas. Puede explorar el módulo en la documentación.
Conclusión
Hemos utilizado un módulo incorporado y otro de terceros para convertir la cadena datetime
en un objeto DateTime. Existe otro módulo incorporado llamado time
con el que podemos convertir la cadena datetime
en un objeto DateTime de forma similar a los módulos datetime
y dateutil
. Pruébelo usted mismo. No será difícil puesto que ya ha hecho algo similar con otros módulos.
Puede que haya más bibliotecas con las que podamos conseguir lo mismo. Los módulos que hemos utilizado en thing tutorial 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.
Feliz Codificación 🙂