Un archivo ICS es un evento de calendario escrito en texto plano. Llega como adjunto de correo, está detrás de cada botón de «añadir al calendario» y es la razón de que una invitación pueda aparecer en tu calendario cuando quien la envía usa un software totalmente distinto al tuyo.
Renombra uno a .txt y ábrelo: el contenido es legible, y casi todos los problemas de calendario que sufre la gente se ven ahí dentro.
BEGIN:VCALENDAR
METHOD:REQUEST
BEGIN:VEVENT
UID:[email protected]
DTSTART;TZID=Europe/Madrid:20261110T140000
DTEND;TZID=Europe/Madrid:20261110T150000
SUMMARY:Revisión del proyecto
LOCATION:Sala 3
END:VEVENT
END:VCALENDAR
Cada evento lleva un UID, un identificador único que no cambia durante toda la vida de ese evento.
Cuando una reunión se mueve, el software del organizador envía un nuevo ICS con el mismo UID y un número de secuencia mayor. Tu calendario reconoce que es el mismo evento y actualiza la entrada existente en vez de añadir otra.
Por eso aparecen los eventos duplicados. Si una herramienta genera un UID nuevo cada vez que exporta — algunos sistemas de reservas y los enlaces «añadir al calendario» de los boletines lo hacen — cada actualización llega como un evento nuevo y acabas con tres copias de una reunión. Los duplicados no son un fallo de tu calendario: le dijeron que eran eventos distintos.
Así que cuando una invitación llega como adjunto sin botones de respuesta, suele ser un archivo PUBLISH, o un REQUEST reenviado de una forma que perdió su condición de invitación. Aceptarlo añade el evento a tu calendario pero no le dice nada al organizador, y así es como alguien aparece como que no ha respondido a una reunión a la que piensa asistir.
DTSTART;TZID=Europe/Madrid:20261110T140000 — las dos en Madrid, convertidas correctamente para los demás. Es lo que quieres.DTSTART:20261110T130000Z — la Z final significa UTC y todo calendario la convierte bien. También correcto.DTSTART:20261110T140000 — las dos donde sea que esté quien lo lee. Para un recordatorio personal está bien. Para una reunión entre ciudades es un desastre: todos ven las 14:00 en su propia zona y nadie se encuentra.Cuando una reunión cae en el calendario con horas de diferencia, casi siempre es por esto. La otra variante común es un evento exportado desde un sistema cuya propia configuración de zona era incorrecta: entonces el archivo es coherente consigo mismo y uniformemente erróneo.
Los eventos de todo el día tienen su propia versión. Uno correcto se escribe como una fecha sin hora (DTSTART;VALUE=DATE:20261110). Escrito como una hora — medianoche en alguna zona — se desplaza al día anterior o siguiente para quien esté lo bastante al este u oeste. Por eso un cumpleaños a veces cae en la fecha equivocada.
Una reunión semanal no se guarda como cincuenta y dos eventos. Es un evento más una regla:
RRULE:FREQ=WEEKLY;BYDAY=MO;COUNT=52
El calendario genera las repeticiones desde esa regla. Dos líneas más manejan las excepciones que todo horario real produce: EXDATE borra una repetición, y un evento aparte con RECURRENCE-ID sustituye una — el mecanismo tras «la reunión de esta semana se pasa al martes» sin tocar el resto de la serie.
El soporte de estas excepciones varía entre programas, por eso una repetición modificada a veces revierte o aparece dos veces cuando una serie pasa de un sistema a otro.
Importar un ICS copia los eventos en tu calendario una vez. Pasan a ser tuyos, puedes editarlos y están congelados. Si la fuente cambia, no ocurre nada: tu copia sigue igual.
Suscribirse a una URL ICS mantiene un enlace. Tu calendario vuelve a descargar el archivo periódicamente y los cambios del origen aparecen. No puedes editar los eventos porque en realidad no son tuyos.
Casi todo el mundo cae en esto alguna vez: un horario de clases, un calendario de partidos o la agenda compartida de un equipo se importa, la organización cambia luego varias fechas y el calendario sigue mostrando en silencio las antiguas. Nada te avisa, porque desde el punto de vista del calendario no ha fallado nada.
La regla es simple. Si la fuente va a seguir cambiando, suscríbete. Si es un evento puntual, impórtalo. Los enlaces de suscripción suelen ser una URL terminada en .ics, a veces empezando por webcal://, que es lo mismo dirigido a una app de calendario.
Un matiz: los calendarios suscritos se actualizan según el propio horario de la aplicación, que puede ser de varias horas o incluso un día.