python

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:

See the gist on github.

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:

See the gist on github.

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:

See the gist on github.

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:

See the gist on github.

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:

See the gist on github.

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

See the gist on github.

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.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Imprimir PDF con Bot de Telegram

La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…

3 días hace

Enviar mensaje con bot de Telegram usando JavaScript (lado del cliente)

Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…

4 días hace

PHP: incrustar imagen en base64

El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…

4 días hace

Plugin ESC POS – Actualización 3.4.0: imprimir HTML

El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…

5 días hace

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

2 semanas hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

2 semanas hace

Esta web usa cookies.