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 juntastimedelta— una duración (diferencia entre dos instantes)
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
datetime.now() # current date + time
date.today() # current date onlyAritmética con timedelta
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.
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.
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):
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
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`.
Mostrar pista
base + timedelta(days=30), luego .strftime
Solución disponible después de 3 intentos
Ejercicio de repaso
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).
Mostrar pista
strptime con el patrón de formato italiano.
Solución disponible después de 3 intentos
Desafío adicional
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.
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