Aritmética de fecha y hora, alteración y truncamiento con Delorean de Python

En esta guía, veremos cómo realizar aritmética, alteración y truncamiento de fecha y hora en Python con Delorean.

Introducción

Trabajar con datetime puede ser un poco desalentador y desafiante, y manejar datetime en Python no es una excepción. El módulo datetime incorporado de Python nos presentó varias clases: date, datetime, time, timezone y timedelta, y se han generado varias bibliotecas externas para abordar los problemas presentes en el módulo oficial, como Flecha.

En esta guía, veremos cómo realizar aritmética de fecha y hora, alteración y truncamiento de objetos de fecha y hora en Delorean, una biblioteca basada en [pytz](https://pypi .org/project/pytz/), que es la biblioteca estándar para resolver problemas relacionados con las zonas horarias, y dateutil, que se utiliza para calcular deltas entre 2 objetos de fecha y hora dados.

Instalación de Delorean Configuración de un entorno virtual

Delorean está disponible para su instalación a través de pip. En general, es recomendable trabajar en un entorno virtual porque le permite organizar las dependencias requeridas por diferentes proyectos aislados.

En Linux o MacOS para crear un entorno virtual, ejecutaríamos:

1
2
3
$ python3 -m venv env
$ source env/bin/activate
$ python3 -m pip install delorean

Alternativamente, en Windows podemos ejecutar:

1
2
3
$ virtualenv env
$ .\env\Scripts\activate
$ python3 -m pip install delorean

Sumar y restar tiempo con Timedelta {#agregar y restar tiempo con timedelta}

timedelta representa la diferencia entre dos objetos datetime y tiene una resolución de microsegundos. Usando timedelta, podemos definir duraciones de diferente duración, como microsegundos, segundos, minutos, horas, días y semanas.

No contiene ninguna información sobre fechas, solo la duración. El timedelta entre el 5 y el 10 de junio es el mismo que el timedelta entre el 5 y el 10 de mayo - 5 días.

Esto hace que sea muy fácil sumar o restar una duración de tiempo de los objetos datetime:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from delorean import Delorean
import datetime

dt_tm_future = Delorean()
dt_tm_future += datetime.timedelta(days=3)

dt_tm_past = Delorean()
dt_tm_past -= datetime.timedelta(weeks=3)

print("The date 3 days from now is: ", dt_tm_future)
print("The date 3 weeks before now was: ", dt_tm_past)

Esto resulta en:

1
2
The date 3 days from now is:  Delorean(datetime=datetime.datetime(2021, 7, 17, 10, 22, 51, 403546), timezone='UTC')
The date 3 weeks before now was:  Delorean(datetime=datetime.datetime(2021, 6, 23, 10, 22, 51, 403643), timezone='UTC')

Obtenga el número de días entre fechas con Delorean {#getnumberofdays betweendateswithdelorean}

Una incógnita común con fechas múltiples es el número de días entre dos fechas dadas. Este resultado normalmente se empaqueta en un objeto timedelta dado que está diseñado para representar esta diferencia.

Dado lo fácil que es sumar o restar timedelta desde y hasta las fechas, es natural que esta operación también sea fácil.

Para obtener el número de días entre dos fechas en Python con Delorean, simplemente restamos las fechas, lo que da como resultado una representación timedelta de la diferencia:

1
2
3
4
5
present_date = Delorean()
new_year = Delorean(datetime=datetime.datetime(2022, 1, 1), timezone='UTC')
until_new_year = new_year - present_date
print("Days until 2022 ", until_new_year)
print("Days till 2022 ", until_new_year.days)

Podemos imprimir todo el objeto timedelta, o simplemente acceder a su atributo days:

1
2
Days until 2022  170 days, 13:24:22.817417
Days till 2022  170

Alteración de hora y fecha

Delorean le permite modificar objetos de fecha y hora sin esfuerzo reemplazando o cambiando valores. Para esto, usamos los métodos replace() y shift().

El método replace() te permite reemplazar un cierto aspecto de la instancia de fecha y hora, mientras que shift() te permite cambiar la zona horaria:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from delorean import Delorean

date = Delorean(datetime=datetime.datetime(2021, 5, 14, 12), timezone='Europe/Paris')

altered_tm = date.replace(hour=10)
altered_dt = date.replace(month=10)

print("Altered time is:", altered_tm)
print("Altered date is:", altered_dt)

altered_dt.shift('US/Pacific')
print("Shifted object:", altered_dt)

Creamos una instancia Delorean, cambiamos sus atributos hora y mes, y luego cambiamos el nuevo objeto de fecha y hora alterado a una nueva zona horaria:

1
2
3
Altered time is: Delorean(datetime=datetime.datetime(2021, 5, 14, 10, 0), timezone='Europe/Paris')
Altered date is: Delorean(datetime=datetime.datetime(2021, 10, 14, 12, 0), timezone='Europe/Paris')
Shifted object: Delorean(datetime=datetime.datetime(2021, 10, 14, 3, 0), timezone='US/Pacific')

Truncar objetos de fecha y hora con Delorean

Dependiendo de la razón por la que esté usando datetime, es posible que no le importen las medidas de orden más pequeño, como segundos o milisegundos. Si bien puede simplemente imprimir los datos sin las medidas, también puede ’truncarlos ()’ para sacarlos del propio objeto ‘Delorean’.

El método también funciona en mediciones de orden superior y acepta todos los marcos de tiempo válidos de Delorean, hasta “años”:

1
2
3
4
5
6
7
from delorean import Delorean

date = Delorean()
print("Date before truncation:", date)

trun_min = date.truncate('minute') # Truncate to minutes
print("Truncated to minutes = ", trun_min)

Vale la pena señalar que está truncando a un cierto nivel de medición. Es decir, si trunca a minutos, se eliminarán segundos y milisegundos. En esencia, estás configurando la resolución de la instancia Delorean:

1
2
Date before truncation: Delorean(datetime=datetime.datetime(2021, 7, 14, 10, 52, 9, 893770), timezone='UTC')
Truncated to minutes =  Delorean(datetime=datetime.datetime(2021, 7, 14, 10, 52), timezone='UTC')

Conclusión

En esta guía, hemos echado un vistazo a cómo realizar aritmética, alteración y truncamiento de fecha y hora en Python con Delorean.

Licensed under CC BY-NC-SA 4.0