El manejo de fechas y horas es una de las tareas más comunes en la programación, ya sea para registrar cuándo ocurrió un evento, calcular el tiempo transcurrido o programar acciones futuras. Python ofrece una solución poderosa para esto con su módulo `datetime`, que proporciona clases y funciones para trabajar con fechas y tiempos de manera eficiente y sencilla.
En este artículo, exploraremos las características clave del módulo `datetime`, cómo usarlo para trabajar con fechas, horas, intervalos de tiempo, y algunos trucos útiles que te harán la vida más fácil como programador.
Para comenzar a usar `datetime`, lo primero que necesitamos hacer es importarlo en nuestro script. Esto es muy sencillo:
import datetime
Este módulo incluye varias clases que permiten trabajar con diferentes aspectos de las fechas y tiempos: `date`, `time`, `datetime`, `timedelta`, entre otros. A continuación, exploraremos cada una de estas clases en detalle.
La clase `date` nos permite trabajar únicamente con fechas, sin manejar horas o minutos. Por ejemplo, para crear un objeto `date`, podemos hacer lo siguiente:
from datetime import date
# Crear una fecha específica
mi_fecha = date(2024, 10, 1) # Año, Mes, Día
print(mi_fecha) # Salida: 2024-10-01
También puedes obtener la fecha actual con:
hoy = date.today()
print(hoy) # Salida: fecha actual
Algunas funciones útiles de la clase `date`:
- `year`, `month`, `day`: Estas propiedades devuelven el año, mes y día de un objeto `date`.
- `weekday()`: Devuelve el día de la semana como un entero (donde 0 es lunes y 6 es domingo).
- `isoformat()`: Devuelve la fecha en formato `AAAA-MM-DD`.
Ejemplo:
print(f"Año: {mi_fecha.year}, Mes: {mi_fecha.month}, Día: {mi_fecha.day}")
# Salida: Año: 2024, Mes: 10, Día: 1
Si solo necesitas manejar horas, la clase `time` es la herramienta adecuada. Te permite representar horas, minutos, segundos y microsegundos sin incluir ninguna información sobre la fecha.
from datetime import time
# Crear una hora específica
mi_hora = time(14, 30, 45) # Hora, Minuto, Segundo
print(mi_hora) # Salida: 14:30:45
Al igual que con `date`, también puedes acceder a las propiedades individuales de `time`:
- `hour`, `minute`, `second`, `microsecond`: Te permiten acceder a cada parte de la hora.
print(f"Hora: {mi_hora.hour}, Minuto: {mi_hora.minute}")
# Salida: Hora: 14, Minuto: 30
La clase `datetime` combina lo mejor de `date` y `time`, permitiendo trabajar tanto con fechas como con horas en un solo objeto.
from datetime import datetime
# Crear una fecha y hora específica
mi_fecha_hora = datetime(2024, 10, 1, 14, 30, 45)
print(mi_fecha_hora) # Salida: 2024-10-01 14:30:45
Para obtener la fecha y hora actuales, podemos usar el método `now()`:
ahora = datetime.now()
print(ahora) # Salida: fecha y hora actuales
Algunas propiedades útiles de `datetime` incluyen:
- `year`, `month`, `day`: Devuelven el año, mes y día.
- `hour`, `minute`, `second`, `microsecond`: Devuelven la hora, minuto, segundo y microsegundo.
- `strftime()`: Formatea la fecha y hora como un string en el formato que desees.
Por ejemplo, si quieres formatear la fecha y hora como `DD-MM-AAAA HH:MM:SS`:
formateado = ahora.strftime("%d-%m-%Y %H:%M:%S")
print(formateado)
La clase `timedelta` es extremadamente útil cuando necesitas calcular la diferencia entre dos fechas o sumar/restar intervalos de tiempo a una fecha u hora.
from datetime import timedelta
# Crear un intervalo de tiempo de 5 días
cinco_dias = timedelta(days=5)
# Sumar 5 días a la fecha actual
nueva_fecha = hoy + cinco_dias
print(nueva_fecha) # Salida: fecha 5 días después de la fecha actual
Puedes crear intervalos de tiempo basados en días, horas, minutos, segundos, e incluso microsegundos:
intervalo = timedelta(days=2, hours=3, minutes=45)
print(intervalo) # Salida: 2 días, 3 horas, 45 minutos
También puedes restar fechas para obtener un objeto `timedelta`:
diferencia = nueva_fecha - hoy
print(diferencia) # Salida: 5 days, 0:00:00
Un escenario común es tener una fecha u hora como string y querer convertirla en un objeto `datetime`. Esto se puede lograr usando el método `strptime()`, que toma un string y lo convierte según el formato que especifiques.
fecha_str = "01-10-2024 14:30:45"
fecha_objeto = datetime.strptime(fecha_str, "%d-%m-%Y %H:%M:%S")
print(fecha_objeto) # Salida: 2024-10-01 14:30:45
El formato debe coincidir con el string que estás analizando para que funcione correctamente.
El módulo `datetime` también soporta la manipulación de zonas horarias. Para esto, puedes usar el módulo adicional `pytz`, que te permite trabajar con distintas zonas horarias.
import pytz
# Obtener la hora actual en UTC
utc_now = datetime.now(pytz.UTC)
print(utc_now)
# Convertir a otra zona horaria
zona_horaria = pytz.timezone('America/New_York')
nueva_zona_horaria = utc_now.astimezone(zona_horaria)
print(nueva_zona_horaria) # Salida: Hora en la zona horaria de Nueva York
Puedes conocer todo el contenido que comparto en mi perfil de LinkedIn
Puedes descargar GRATIS mi manual completo en pdf de Python Rápido