Cómo humanizar los objetos de fecha y hora de Delorean

Humanizar las fechas es importante para una buena experiencia de usuario. En esta guía, veremos cómo humanizar fechas y fechas relativas usando Delorean y Python.

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 humanizar los objetos de fecha y hora en Delorean, una biblioteca basada en *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 determinados.

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 te permite organizar las dependencias que requieren los diferentes proyectos de forma aislada.

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

Humanización de objetos de fecha y hora de Delorean con humanize() {#humanización de objetos de fecha y hora de Delorean con humanización}

Si bien las marcas de tiempo de Epoch son extremadamente precisas y excelentes para dispositivos digitales, no son demasiado comprensibles para los humanos. No tenemos una conciencia cognitiva de tales escalas. Además, en realidad ni siquiera pensamos en fechas en muchos casos, excepto en algunas ocasiones más raras. La mayoría de la gente podría no haber sabido qué fecha es, si no fuera por el reloj y el calendario constantes integrados en la mayoría de los dispositivos digitales, desde fijos hasta móviles.

Durante la mayor parte del tiempo, hemos estado tratando con el tiempo en referencia a dónde estamos ahora. ¿Cuándo viste a tu amigo? ¿El 12 de julio de 2021 o ayer? La función humanize() toma una fecha real y la convierte en lo que la gente usaría al transmitir la hora de un evento:

1
2
3
4
5
6
7
import  delorean
datetime_strings = ["Thu July 12 2021", "June 5th, 2021", "April 28th, 2052"]

for date in datetime_strings:
    delorean_object = delorean.parse(date)
    human_date = delorean_object.humanize()
    print(human_date)

Estas cadenas de fecha se analizan en objetos Delorean y luego se humanizan:

1
2
3
4 hours from now
a month ago
30 years from now

Esta es una gran característica para anotar el tiempo antes o hasta los eventos en las aplicaciones. Por ejemplo, puede decirle a un usuario que recibió una notificación hace un día o que se acerca un concierto en un mes. Esto también se puede cambiar si el evento tiene, digamos, más de N días.

Para hacer esto, mediríamos si una fecha ha ocurrido más de N días antes de la fecha actual, usando timedelta y ajustamos el mensaje apropiadamente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import delorean
# Dates denote events, such as notifications.
# First event occured recently before writing this guide.
# The second event occured a bit over a month before that.
datetime_strings = ["Thu July 12 2021", "June 5th, 2021"]

for index, date in enumerate(datetime_strings):
    delorean_object = delorean.parse(date)
    current_time = delorean.Delorean()
    if (current_time-delorean_object) < datetime.timedelta(5):
        human_date = delorean_object.humanize()
        print(f'Event {index} happened', human_date)
    else:
        print(f'Event {index} happened on', delorean_object.date)

Esto resulta en:

1
2
Event 0 happened 14 hours ago
Event 1 happened on 2021-06-05

Esto tiene mucho sentido, porque si le dices a alguien que algo sucedió ayer, no se necesita pensar mucho para darse cuenta. Pero si dices que algo sucedió hace un mes, es probable que miren el calendario para tener una idea de cuándo fue eso.

Humanizar fechas relativas con Delorean

Delorean también facilita la referencia de fechas en relación con otra fecha de una manera muy intuitiva y humana.

Nos vemos a esta hora el próximo viernes.

Esto es bien entendido por la gente, pero es tedioso codificar a mano usando timedelta. Usando una combinación de next_ y last_ con días de la semana, meses o incluso años, podemos calcular y crear objetos Delorean basados ​​en fechas y horas ya existentes:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
from delorean import Delorean

dt_tm = Delorean()
nxt_fri = dt_tm.next_friday()
print("Friday next week: ", nxt_fri)

# Date for Two Fridays ago
two_fridays_ago = dt_tm.last_friday(2)
print("Friday two weeks ago: ", two_fridays_ago)

# Get Two Fridays from now at midnight
two_fridays_from_now_at_midnight = dt_tm.next_friday(2).midnight
print("Two Fridays from now at midnight: ", two_fridays_from_now_at_midnight)

# Get this time next month
next_month = dt_tm.next_month()
print("This time next month: ", next_month)

# Get this time next year, at midnight
next_month = dt_tm.next_year().midnight
print("This time next month: ", next_month)

Para obtener la fecha de un día de la semana más que la última o la próxima semana, pasamos un número que indica el número de semanas que estamos atravesando. Lo mismo ocurre con los días, meses o años:

1
2
3
4
5
Friday next week:  Delorean(datetime=datetime.datetime(2021, 7, 16, 19, 25, 34, 427028), timezone='UTC')
Friday two weeks ago:  Delorean(datetime=datetime.datetime(2021, 7, 2, 19, 25, 34, 427028), timezone='UTC')
Two Fridays from now at midnight:  2021-07-23 00:00:00+00:00
This time next month:  Delorean(datetime=datetime.datetime(2021, 8, 11, 19, 25, 34, 427028), timezone='UTC')
This time next month:  2022-07-11 00:00:00+00:00

Conclusión

En esta guía, hemos echado un vistazo a cómo humanizar los objetos de fecha y hora de Delorean en Python. La humanización es el proceso de convertir instancias de fecha y hora a un formato más humano, utilizando palabras y períodos de tiempo relativos. Dada la relatividad de estos plazos, tiene sentido humanizar las fechas en algunos casos, mientras que en otros no.

Licensed under CC BY-NC-SA 4.0