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)