Saltar al contenido

Operaciones con fechas: Sumar y restar días en Python

Operaciones con fechas en Python

Qué dolor de cabeza nos puede acarrear el realizar operaciones con fechas en Python, bueno, y en cualquier lenguaje. Yo las uso frecuentemente, especialmente cuando tengo que hacer consultas de base de datos para determinados listados. Por ejemplo: Obtener las mediciones de los sensores de los últimos dos días, devolver las alertas que ha generado el sistema en la última hora, etc. Menos mal que Python nos pone las cosas fáciles para sumar y restar fechas y tiempo a una fecha dada.

El objeto timedelta, la base para operaciones con fechas

Un objeto timedelta representa una duración de tiempo, es decir, la diferencia entre dos fechas o instantes de tiempo.
Cuando necesitemos realizar operaciones con fechas/tiempo, utilizaremos un objeto timedelta como referencia. Por ejemplo, si queremos representar una duración de tiempo de un día, crearemos un objeto timedelta del siguiente modo:

>>> import datetime
>>> datetime.timedelta(days=1)
datetime.timedelta(1)

Una vez que tenemos esto claro, veremos cómo llevar a cabo operaciones con fechas.

Restar días a una fecha en python

Para restar días a una fecha simplemente pasamos los días al objeto timedelta y se los restamos a la fecha base. Por ejemplo, si queremos representar la fecha de «ayer», haremos lo siguiente:

>>> import datetime
>>> ahora = datetime.datetime.utcnow()
>>> print(ahora)
2019-03-21 11:01:04.192582
>>> ayer = ahora - datetime.timedelta(days=1)
>>> print(ayer)
2019-03-20 11:01:04.192582

Restar horas a una fecha en python

En el siguiente ejemplo veremos cómo obtener la hora anterior a la actual:

>>> hace_una_hora = ahora - datetime.timedelta(hours=1)
>>> print(hace_una_hora)
2019-03-21 10:01:04.192582

Sumar días a una fecha en python

Para sumar días a una fecha solamente tenemos que pasar los días al objeto timedelta y se los sumamos a la fecha base. El ejemplo que sigue obtiene la fecha de mañana:

tomorrow = ahora + datetime.timedelta(days=1)
print(tomorrow)
2019-03-22 11:01:04.192582

Todos los parámetros que se pueden pasar a timedelta

En los ejemplos anteriores hemos visto cómo sumar/restar días y horas a una fecha dada. No obstante, un objeto timedelta se puede inicializar con todos los siguientes valores: weeks, days, hours, minutes, seconds, milliseconds y microseconds.

>>> import datetime
>>> datetime.timedelta(weeks=1)
datetime.timedelta(7)
>>> datetime.timedelta(days=7)
datetime.timedelta(7)