Python
La biblioteca estándar
fecha y hora - datetime
básico

Módulo datetime de Python: uso de timedelta, timezone y tzinfo

Es seguro decir que trabajar con fechas y horas es una tarea cotidiana para cualquier desarrollador. Esto es especialmente cierto cuando se trata de datos sensibles al tiempo, programación o registro.

Python, con su potente biblioteca estándar, proporciona un módulo simple pero potente llamado datetime para manejar fechas y horas de manera eficiente.

Este artículo describe el módulo datetime, sus principales clases y funciones, y las mejores prácticas para trabajar con fechas y horas en Python.

💡

Si utiliza Python en VScode, consulte este post.

1. Entender el módulo datetime de Python

El módulo datetime de la biblioteca estándar de Python contiene las siguientes funciones: datetime, date, time, timedelta, tzinfo, y otras clases para la manipulación de la fecha y la hora. Empecemos con las clases y métodos más comunes.

1.1. datetime.datetime

Esta clase representa un único punto en el tiempo con información de fecha y hora. También proporciona varios métodos y atributos para acceder y manipular valores de fecha y hora.

Así que primero vamos a crear un objeto datetime.

from datetime import datetime
 
# fecha y hora actuales
now = datetime.now()
 
print(now)
 
# una fecha y hora concretas
dt = datetime(2022, 9, 15, 10, 30)
 
print(dt)

Con este objeto se puede acceder a los siguientes atributos

from datetime import datetime
 
now = datetime.now()
 
print(f"Year: {now.year}")
print(f"Month: {now.month}")
print(f"Day: {now.day}")
print(f"Hour: {now.hour}")
print(f"Minute: {now.minute}")
print(f"seconds: {now.second}")
print(f"Milliseconds: {now.microseconds}")

1.2 datetime.date

Esta clase representa una fecha (año, mes, día) y proporciona métodos para trabajar con fechas sin información horaria.

Primero, crearemos un objeto date para obtener la información que queremos.

from datetime import date
 
# fecha actual
today = date.today()
 
print(today)
 
# una fecha concreta
d = date(2022, 9, 15)
 
print(d)

1.3. datetime.time

Esta clase representa el tiempo (horas, minutos, segundos, milisegundos) y proporciona métodos para trabajar sólo con valores de tiempo, sin información de fecha.

Crea un objeto time para obtener la información horaria.

from datetime import time
 
# hora específica
t = time(10, 30, 15)
 
print(t)

1.4. datetime.timedelta

Esta es una clase muy útil que representa un período de tiempo y se puede utilizar para realizar cálculos con objetos datetime{:python, como sumar o restar días, horas o minutos.

Un objeto timedelta{:python puede crearse como sigue..:

from datetime import timedelta
 
# Declara una duración de 5 días, 3 horas y 30 minutos en una variable
delta = timedelta(days=5, hours=3, minutes=30)
 
print(delta)

Calculemos un periodo de tiempo concreto con los objetos datetime{:python y timedelta{:python.

from datetime import datetime, timedelta
 
now = datetime.now()
 
# Calcular después de 5 días
future = now + timedelta(days=5)
 
print(future)
 
# Calcula 3 horas hace
past = now - timedelta(hours=3)
 
print(past)

2. Trabajar con zonas horarias y hora UTC (UTC TIme)

El módulo datetime proporciona la clase timezone, una subclase de tzinfo, para trabajar con husos horarios y desfases UTC (Tiempo Universal Coordinado). También proporciona la clase timezone, que es una subclase de tzinfo. Para crear un objeto datetime que tenga en cuenta la zona horaria, puedes utilizar la clase timezone y el método astimezone().

Véase el ejemplo.

from datetime import datetime, timezone
 
# hora UTC actual
utc_now = datetime.now(timezone.utc)
 
print(utc_now)
 
# convertir a otra zona horaria
from pytz import timezone
 
tz = timezone("Asia/Seoul")
local_now = utc_now.astimezone(tz)
 
print(local_now)

En el ejemplo anterior, hemos utilizado la biblioteca pytz, un paquete externo, para manejar la zona horaria dada. La librería pytz es ampliamente utilizada para manejar conversiones de zonas horarias en Python, ya que proporciona una extensa y actualizada base de datos de zonas horarias.

3. Formateo y análisis de fecha y hora

El módulo datetime proporciona dos métodos útiles para formatear y analizar fechas y horas como cadenas.

  • datetime.strptime(cadena_fecha, formato): Este método toma dos argumentos, date_string, una cadena que representa la fecha y la hora, y format, una cadena de formato que especifica la estructura de la fecha y la hora en la cadena de entrada, para extraer la información horaria de una cadena.
  • datetime.strftime(formato): Este método toma un argumento, format, una cadena de formato que especifica la estructura deseada de la cadena de salida. Este método se invoca sobre un objeto datetime y devuelve una representación en forma de cadena de la fecha/hora según el formato especificado.
from datetime import datetime
 
# Lee la información horaria de una cadena con el método strptime()
date_string = "15-04-2023 16:30:00"
format_string = "%d-%m-%Y %H:%M:%S"
date_obj = datetime.strptime(date_string, format_string)
 
print(date_obj)  # Output: 2023-04-15 16:30:00
 
# Convierte la información horaria en una cadena con el método strftime()
new_format_string = "%A, %B %d, %Y at %I:%M %p"
formatted_date = date_obj.strftime(new_format_string)
 
print(formatted_date)  # Output: Saturday, April 15, 2023 at 04:30 PM

4. Buenas prácticas para trabajar con fechas y horas en Python

Hasta ahora, hemos cubierto lo básico para trabajar con fechas y horas con el módulo datetime de Python. Aquí hay algunas buenas prácticas a tener en cuenta cuando se utiliza este módulo.

  • Conocimiento de la zona horaria: El conocimiento de la zona horaria es una cuestión importante cuando se utiliza el objeto datetime. Cuando trabajes con fechas y horas en diferentes zonas horarias, utiliza siempre el objeto datetime para evitar problemas como el horario de verano o las diferencias horarias locales.
  • Recomendamos utilizar la biblioteca pytz para la conversión de zonas horarias. La biblioteca pytz ofrece una amplia y actualizada base de datos de husos horarios. Se utiliza ampliamente para manejar las conversiones de zonas horarias en Python.
  • Para convertir un objeto datetime en una cadena o para analizar la información de una cadena, utilice los métodos strftime() y strptime( ). Estos métodos proporcionan una forma consistente y flexible de manejar cadenas de fecha y hora en Python.

5. Conclusión

En este artículo, hemos cubierto los fundamentos del módulo datetime de Python, incluyendo las principales clases y funciones para trabajar con fechas y horas. También hemos discutido las mejores prácticas para el manejo de zonas horarias, el formato de cadenas, y el análisis sintáctico de fechas y horas.

Ahora, para más detalles, recomiendo leer la documentación oficial de Python para datetime (opens in a new tab). Cuando tiene sentido, la documentación oficial es siempre la mejor guía.

Para soluciones a casos específicos, vea el calculate, compare date/time, convert date/time, print date/time post.

Trabajar con fechas y horas es algo que encontrarás a menudo, así que tómate tu tiempo para entenderlo. Una vez que le cojas el truco, estarás bien equipado para realizar una gran variedad de tareas de manipulación de fechas y horas en el futuro.

copyright for Python datetime

© 2023 All rights reserved.