Manejo de fechas con Arrow

imagen / Moose Photos
  
25 de Mayo de 2019   0  

¡Hola de nuevo amigos! Hoy les platicaré sobre una librería que me encontré mientras navegaba en internet y que me pareció muuy interesante y que sin duda alguna probaré en mis próximos proyectos. 

La librería se llama Arrow y nos ofrece una alternativa para manipular de manera fácil información relacionada a fechas y horas utilizando Python. 

 

 ¿Porqué utilizar esta librería y no las que trae por default Python?

La biblioteca estándar de Python y algunos otros módulos de bajo nivel tienen una funcionalidad de fecha, hora y zona horaria casi completas, pero no funcionan muy bien desde una perspectiva de usabilidad:

  • Demasiados módulos: datetime, time, calendar, dateutil, pytz y más.
  • Demasiados tipos: fecha, hora, fecha y hora, tzinfo, timedelta, relativedelta, etc.
  • Las zonas horarias y las conversiones de fecha y hora son un tanto desagradables.
  • Brechas en la funcionalidad: análisis ISO-8601, intervalos de tiempo, humanización.

¿Que características nos ofrece Arrow?

  • Totalmente implementado, es un reemplazo directo para datetime.
  • Soporta Python 2.7, 3.5, 3.6, 3.7 y 3.8.
  • Soporta zona horaria y UTC de forma predeterminada.
  • Proporciona opciones de creación súper simples para muchos escenarios de entrada comunes.
  • Método actualizado .replace con soporte para compensaciones relativas, incluidas semanas.
  • Formateo y análisis de cadenas automáticamente.
  • Soporte parcial para ISO-8601.
  • Conversión de zona horaria.
  • Marca de tiempo disponible como una propiedad.
  • Humaniza y apoya una creciente lista de locales contribuidos.
  • Extensible para tus propios tipos de datos derivados de Arrow.

¿Cómo instalo Arrow?

$ pip install -U arrow

Veamos cómo funciona. 

A continuación veamos unos ejemplos: 

>>> import arrow
>>> utc = arrow.utcnow()
>>> utc
<Arrow [2013-05-11T21:23:58.970460+00:00]>

>>> utc = utc.replace(hours=-1)
>>> utc
<Arrow [2013-05-11T20:23:58.970460+00:00]>

>>> local = utc.to('US/Pacific')
>>> local
<Arrow [2013-05-11T13:23:58.970460-07:00]>

>>> arrow.get('2013-05-11T21:23:58.970460+00:00')
<Arrow [2013-05-11T21:23:58.970460+00:00]>

>>> local.timestamp
1368303838

>>> local.format()
'2013-05-11 13:23:58 -07:00'

>>> local.format('YYYY-MM-DD HH:mm:ss ZZ')
'2013-05-11 13:23:58 -07:00'

>>> local.humanize()
'an hour ago'

>>> local.humanize(locale='ko_kr')
'1시간 전'

 

Creación de objetos es así: 

>>> arrow.utcnow()
<Arrow [2013-05-07T04:20:39.369271+00:00]>

>>> arrow.now()
<Arrow [2013-05-06T21:20:40.841085-07:00]>

>>> arrow.now('US/Pacific')
<Arrow [2013-05-06T21:20:44.761511-07:00]>

 

Use un datetime del tipo naive o timezone-aware, o especifique con flexibilidad una zona horaria:

>>> arrow.get(datetime.utcnow())
<Arrow [2013-05-07T04:24:24.152325+00:00]>

>>> arrow.get(datetime(2013, 5, 5), 'US/Pacific')
<Arrow [2013-05-05T00:00:00-07:00]>

>>> from dateutil import tz
>>> arrow.get(datetime(2013, 5, 5), tz.gettz('US/Pacific'))
<Arrow [2013-05-05T00:00:00-07:00]>

>>> arrow.get(datetime.now(tz.gettz('US/Pacific')))
<Arrow [2013-05-06T21:24:49.552236-07:00]>

 

Generando un parse desde un elemento string: 

>>> arrow.get('2013-05-05 12:30:45', 'YYYY-MM-DD HH:mm:ss')
<Arrow [2013-05-05T12:30:45+00:00]>


Buscando una fecha en una cadena:

>>> arrow.get('June was born in May 1980', 'MMMM YYYY')
<Arrow [1980-05-01T00:00:00+00:00]>

 

En formato "Humano" (Humanize): 

Utilizando el elemento now()

>>> past = arrow.utcnow().shift(hours=-1)
>>> past.humanize()
'an hour ago'

O con otro objeto Arrow o datetime:

>>> present = arrow.utcnow()
>>> future = present.shift(hours=2)
>>> future.humanize(present)
'in 2 hours'

 

------------------------------------------------------------------------

¿Vale la pena probar verdad? 

Estos son solo algunos ejemplos de lo que puedes hacer con esta librería. Si te interesa conocer más te invito a leer su documentación oficial

 



Alex Dzul

FullStack Python / Django Developer. #jslove

Temas relacionados