Sumar y restar fechas en Python

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

Puedes probar el ejemplo aquí.

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í:

Si quieres puedes probarlo en línea.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

2 comentarios en “Sumar y restar fechas en Python”

Dejar un comentario