Trabajar con fechas y tiempos en Python puede complicarse, especialmente cuando se trata de manejar zonas horarias, cálculos de intervalos o formatos personalizados.

Aunque datetime es la biblioteca nativa para este propósito, su uso puede resultar limitado o poco intuitivo en escenarios avanzados.

Pendulum surge como una solución robusta, extendiendo y mejorando las capacidades de datetime. Su enfoque simplificado y sus características avanzadas hacen que trabajar con fechas sea más eficiente y menos propenso a errores.

En este artículo, exploraremos algunas de las muchas funcionalidades de Pendulum para cubrir casos comunes y avanzados en la gestión de fechas en Python.

Tabla de contenidos

1. Crear y manipular fechas

Pendulum hace que trabajar con fechas sea simple e intuitivo, ya sea creando fechas desde cero, manipulándolas o interpretando cadenas de texto.

Crear fechas con Pendulum

Python
import pendulum

# Obtener la fecha y hora actuales en UTC
now = pendulum.now("UTC")
print(now)  # Ejemplo: 2024-12-01 23:03:31.244107+00:00

# Crear una fecha y hora específicas
specific_date = pendulum.datetime(2024, 12, 25, 10, 30, tz="America/New_York")
print(specific_date)  # 2024-12-25 10:30:00-05:00

Convertir cadenas de texto con pendulum.parse

El método parse convierte cadenas de texto en objetos de fecha. Soporta automáticamente zonas horarias y formatos estándar.

Python
# Convertir una fecha básica
parsed_date = pendulum.parse("2024-12-01")
print(parsed_date)  # 2024-12-01 00:00:00+00:00

# Convertir una fecha con zona horaria
parsed_date_tz = pendulum.parse("2024-12-01T15:00:00-05:00")
print(parsed_date_tz)  # 2024-12-01 15:00:00-05:00

Manipular fechas con add() y subtract()

Pendulum permite sumar y restar tiempo.

Python
# Sumar tiempo
future_date = specific_date.add(days=5, hours=2)
print(future_date)  # 2024-12-30 12:30:00-05:00

# Restar tiempo
past_date = specific_date.subtract(weeks=1, minutes=15)
print(past_date)  # 2024-12-18 10:15:00-05:00

2. Conversiones de zonas horarias

Pendulum facilita la conversión entre zonas horarias, resolviendo problemas comunes relacionados con el manejo del tiempo global.

Cambiar a una zona horaria específica

Python
# Convertir una fecha a otra zona horaria
uy_time = specific_date.in_tz("America/Montevideo")
print(uy_time)  # 2024-12-25 12:30:00-03:00

Convertir fechas locales a UTC

Python
local_date = pendulum.datetime(2024, 12, 1, 10, 0, tz="America/New_York")
utc_date = local_date.in_tz("UTC")
print(utc_date)  # 2024-12-01 15:00:00+00:00

3. Cálculo de diferencias con diff()

Pendulum incluye herramientas intuitivas para calcular diferencias entre fechas.

Python
start_date = pendulum.datetime(2024, 12, 1)
end_date = pendulum.datetime(2024, 12, 31)

# Diferencia en días
days_diff = end_date.diff(start_date).in_days()
print(days_diff)  # 30

# Diferencia en horas
hours_diff = end_date.diff(start_date).in_hours()
print(hours_diff)  # 720

# Diferencia en semanas
weeks_diff = end_date.diff(start_date).in_weeks()
print(weeks_diff)  # 4

4. Diferencias en términos humanos

El método diff_for_humans() convierte una diferencia de tiempo en una representación amigable para los humanos. Este método genera frases como «hace 3 días» o «en 2 semanas», dependiendo de si la diferencia de tiempo es pasada o futura.

Diferencia respecto al momento actual

Python
# Fecha del momento actual
print(pendulum.now().date()) # 2024-12-01

# Hace cuánto ocurrió algo
past_date = pendulum.datetime(2024, 11, 25)
print(past_date.diff_for_humans())  # "7 days ago"

# Cuánto falta para un evento
future_date = pendulum.datetime(2024, 12, 31)
print(future_date.diff_for_humans())  # "in 4 weeks"

Diferencia entre dos fechas específicas

Python
start_date = pendulum.datetime(2024, 1, 1)
end_date = pendulum.datetime(2024, 12, 1)
print(start_date.diff_for_humans(end_date)) # "11 months before"
print(end_date.diff_for_humans(start_date)) # "11 months after"

5. Formateo y localización

Pendulum facilita el formateo de fechas y soporta múltiples idiomas, lo que lo hace ideal para proyectos internacionales.

Formateo personalizado

Python
# Formateo básico
formatted_date = specific_date.format("YYYY-MM-DD HH:mm:ss")
print(formatted_date)  # 2024-12-25 10:30:00

Localización

Pendulum puede formatear fechas en varios idiomas mediante el parámetro locale del método format():

Python
# Mostrar fecha en español
localized_date = specific_date.format("dddd, D [de] MMMM [de] YYYY", locale="es")
print(localized_date)  # miércoles, 25 de diciembre de 2024

6. Intervalos e iteraciones

Pendulum permite definir intervalos y recorrer fechas dentro de un rango.

Las unidades admitidas para un rango son: years, months, weeks, days, hours, minutes, seconds y microseconds.

Rango de días

Python
# Crear un intervalo de fechas
start = pendulum.datetime(2024, 12, 1)
end = pendulum.datetime(2024, 12, 10)
interval = pendulum.interval(start, end)

# Iterar sobre el intervalo especificando un rango
for date in interval.range('days'):
    print(date)  # Fechas del 1 al 10 de diciembre

Incrementos flexibles

Pendulum soporta rangos con incrementos personalizados.

Python
# Rango con incrementos de 2 días
for date in interval.range("days", 2):
    print(date)  # 2024-12-01, 2024-12-03, etc.

Conclusión

Pendulum es una herramienta potente y fácil de usar para manejar fechas en Python. Con su sintaxis intuitiva y capacidades avanzadas, puedes realizar desde tareas básicas como sumar días hasta cálculos complejos de intervalos y manejo de zonas horarias.

Si trabajas en proyectos que requieren precisión y claridad en el manejo de fechas, Pendulum es una opción a tener en cuenta.

Puedes explorar más funcionalidades y opciones en su sitio web.

Categorizado en:

Etiquetado en: