Hace tiempo publiqué cómo operar con fechas en Java, y cómo sumar y restar fechas con JavaScript. Hoy me tocó trabajar con Python y vengo a compartir lo que aprendí: sumar y restar fechas.
Por ejemplo, veremos cómo sumarle días a una fecha, así como restarle. Y no solo días, también años, meses, etcétera.
Obteniendo la fecha
Necesitamos un objeto de tipo fecha, y no una cadena. Por lo tanto, antes de que puedas operar fechas necesitas obtener la fecha.
Si quisieras obtener la fecha actual podrías hacerlo con:
ahora = datetime.now()
Y si quieres que sea introducida por el usuario, o a partir de una cadena, utiliza algo como lo siguiente:
Solo recuerda validar la fecha.
Sumar y restar fechas en Python con timedelta
Una vez que tengas la fecha puedes sumar y restar con la siguiente sintaxis:
fecha_resultado = fecha - timedelta(argumentos...)
Usamos el operador +
y el operador -
para operar con la fecha y con lo que devuelva timedelta
. A timedelta
le puedes pasar por ejemplo los días o las horas.
Veamos un ejemplo que resta 7 días a la fecha actual:
Al ejecutarlo, la salida es:
Ahora: 2020-04-23 16:05:16.015948
Hace una semana: 2020-04-16 16:05:16.015948
También puedes formatear la fecha en caso de que solo necesites, por ejemplo, la fecha sin hora:
Operar fechas introducidas por usuario
Como te decía anteriormente, puedes escanear la fecha y luego parsearla. Veamos un ejemplo simple que parsea una fecha con hora, y le suma una hora usando timedelta:
De este modo la fecha como cadena podría venir de una base de datos, del teclado, etcétera.
Usando dateutil.relativedelta
Hasta ahora hemos operado con horas y con días, pero falta operar con meses o semanas. Lo anteriormente explicado solo cubre horas, días y otros, pero no meses (tomando en cuenta años bisiestos y todo eso)
Afortunadamente existe un paquete que podemos instalar con pip:
pip install python-dateutil
Y a partir del mismo ya podemos usar dateutil.relativedelta
. Lo importante aquí es saber que siempre vamos a sumar, pero que si queremos restar, debemos indicar los parámetros en negativo.
Veamos los ejemplos:
En la línea 15 puedes ver que estoy haciendo una resta pues estoy especificando los años en -2
; así que aunque sume, en realidad estoy restando.
Puedes ver la documentación de relativedelta.
Poniendo todo junto
El ejemplo completo (que usa timedelta y relativedelta) queda así:
me encantaria que ayudaras para a partir de restar fechas obtener la edad de alguien
Hola. Gracias por sus comentarios. Si tiene alguna consulta, solicitud de creación de un programa o solicitud de cambio de software estoy para servirle en https://parzibyte.me/#contacto
Saludos!