Saltar al contenido principal
eLearner.app
Módulo 8 · Lección 2 de 430/36 en el curso~12 min
Lecciones del módulo (2/4)

datetime: fechas y horas

El módulo datetime proporciona las clases para representar fechas y horas.

Las tres clases principales

  • date — solo fecha (año, mes, día)
  • time — solo hora (hora, minuto, segundo, microsegundo)
  • datetime — fecha y hora juntas
  • timedelta — una duración (diferencia entre dos instantes)
Python
from datetime import date, time, datetime, timedelta

date(2025, 1, 1)                  # datetime.date(2025, 1, 1)
time(14, 30, 0)                   # datetime.time(14, 30)
datetime(2025, 1, 1, 14, 30, 0)   # datetime.datetime(2025, 1, 1, 14, 30)

"Ahora": now y today

Python
datetime.now()        # current date + time
date.today()          # current date only

Aritmética con timedelta

Python
from datetime import datetime, timedelta

ora = datetime(2025, 1, 1, 12, 0)
domani = ora + timedelta(days=1)
una_ora_fa = ora - timedelta(hours=1)

# difference between two datetimes -> timedelta
delta = domani - ora
delta.days        # 1
delta.total_seconds()   # 86400.0

timedeltaaceptadays, seconds, microseconds, milliseconds, minutes, hours, weeks(NOmonthsniyears`, que son ambiguos).

Formateo: strftime

Transforma datetime → cadena de texto según un patrón.

Python
ora = datetime(2025, 1, 1, 14, 30)
ora.strftime("%Y-%m-%d")         # '2025-01-01'
ora.strftime("%d/%m/%Y %H:%M")   # '01/01/2025 14:30'
ora.strftime("%A %d %B %Y")      # 'Wednesday 01 January 2025' (locale-dependent)

Directivas más utilizadas: %Y año de 4 dígitos, %m mes de 2 dígitos, %d día de 2 dígitos, %H hora en formato 24h, %M minutos, %S segundos.

Análisis (parsing): strptime

Lo contrario: cadena → datetime, dado el patrón esperado.

Python
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)

ISO 8601

Para el intercambio de datos prefiere siempre el formato ISO 8601 (AAAA-MM-DDTHH:MM:SS):

Python
ora.isoformat()                 # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")

Zonas horarias y datetimes conscientes

Por defecto, los objetos datetime en Python son ingenuos (naive, es decir, no contienen información de zona horaria). Para aplicaciones reales, la mejor práctica es hacerlos conscientes (aware) estableciendo la zona horaria mediante datetime.timezone.utc o utilizando el módulo zoneinfo.

Pruébalo

Ejercicio#python.m8.l2.e1
Intentos: 0Cargando...

Calcula la fecha 30 días después del 1 de enero de 2025 y formatéala como 'AAAA-MM-DD' en la variable `date_str`. Evalúa `date_str`.

Cargando editor...
Mostrar pista

base + timedelta(days=30), luego .strftime

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#python.m8.l2.e2
Intentos: 0Cargando...

Dada la cadena `s = '15/03/2025'`, analízala con strptime en la variable `d` (objeto datetime). Evalúa el número entero del día de la semana `d.weekday()` (0=lunes, 6=domingo).

Cargando editor...
Mostrar pista

strptime con el patrón de formato italiano.

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#python.m8.l2.e3
Intentos: 0Cargando...

Importa `date` del módulo `datetime`. Calcula la diferencia en días entre el 25 de diciembre de 2026 (`date(2026, 12, 25)`) y el 20 de diciembre de 2026 (`date(2026, 12, 20)`). Guarda el número entero de días (usando el atributo `.days` del delta) en `days_diff`. Finalmente, evalúa la variable.

Cargando editor...
Mostrar pista

La diferencia entre dos fechas devuelve un timedelta. Accede a los días enteros con delta.days.

Solución disponible después de 3 intentos