Trabajar con fechas y horas en Python: guía de datetime
Cómo manejar fechas y horas en Python con datetime: obtener la fecha actual, formatear, sumar y restar días, y convertir texto a fecha. Con los detalles de formato que todos confunden.
Casi cualquier automatización toca fechas: nombrar archivos con la fecha de hoy, calcular cuántos días faltan para algo, filtrar registros por rango de tiempo. Python trae todo eso en el módulo datetime, que viene incluido (no se instala nada). Aquí lo esencial, con los puntos de formato donde todos tropiezan.
from datetime import datetime, date, timedelta
La fecha y hora actual
ahora = datetime.now()
print(ahora) # 2026-10-06 14:30:52.123456
hoy = date.today()
print(hoy) # 2026-10-06 (solo la fecha, sin hora)
datetime.now() te da fecha y hora completas; date.today() solo la fecha. Usa el que necesites según si te importa la hora o no.
Formatear una fecha como texto (strftime)
Para mostrar una fecha en el formato que quieras, se usa strftime con códigos:
ahora = datetime.now()
print(ahora.strftime("%d/%m/%Y")) # 06/10/2026
print(ahora.strftime("%Y-%m-%d")) # 2026-10-06
print(ahora.strftime("%H:%M")) # 14:30
print(ahora.strftime("%d de %B de %Y")) # 06 de October de 2026
Los códigos más usados: %Y año de 4 dígitos, %m mes, %d día, %H hora (24h), %M minutos, %S segundos, %B nombre del mes. La regla para recordarlos: en general, mayúscula para la versión larga/completa y minúscula para la corta (%Y = 2026, %y = 26).
Un uso práctico: nombrar archivos con la fecha para que no se pisen:
nombre = ahora.strftime("respaldo_%Y-%m-%d.zip") # respaldo_2026-10-06.zip
Convertir texto a fecha (strptime)
El inverso: tienes una fecha como texto y quieres operarla. Se usa strptime, indicando el formato en que viene el texto:
texto = "06/10/2026"
fecha = datetime.strptime(texto, "%d/%m/%Y")
print(fecha) # 2026-10-06 00:00:00
Aquí está el error que confunde a todos: strptime necesita que el formato coincida exactamente con el texto. Si el texto es 06-10-2026 (con guiones) pero le pasas %d/%m/%Y (con barras), falla con un ValueError. El patrón del segundo argumento debe reflejar los separadores reales del texto.
Y el truco para no confundir los dos métodos: strftime es format (de fecha a texto), strptime es parse (de texto a fecha).
Sumar y restar tiempo (timedelta)
Para calcular fechas futuras o pasadas, se usa timedelta:
hoy = date.today()
en_una_semana = hoy + timedelta(days=7)
hace_un_mes = hoy - timedelta(days=30)
en_dos_horas = datetime.now() + timedelta(hours=2)
print(en_una_semana) # 2026-10-13
timedelta acepta days, hours, minutes, seconds, weeks. Sumar o restar es tan simple como usar + y -.
Calcular la diferencia entre dos fechas
Restar dos fechas te da un timedelta, del que sacas los días:
inicio = date(2026, 1, 1)
fin = date(2026, 10, 6)
diferencia = fin - inicio
print(diferencia.days) # 278 (días entre las dos fechas)
Útil para “cuántos días faltan para X” o “cuánto tiempo pasó desde Y”.
Resumen
datetime.now()/date.today()→ fecha y hora actuales.strftime→ de fecha a texto (format), con códigos como%Y-%m-%d.strptime→ de texto a fecha (parse); el formato debe coincidir exactamente.timedelta→ sumar y restar días, horas, etc., con+y-.- Restar dos fechas →
.dayste da los días de diferencia.
Con esto cubres casi todo lo que una automatización necesita con fechas. Combínalo con el Programador de tareas de Windows y podrás, por ejemplo, generar un reporte con la fecha en el nombre, cada día, sin tocar nada.
¿Necesitas trabajar con zonas horarias o con fechas en español (nombres de mes en castellano)? Escríbeme desde contacto y lo cubrimos.