Lector de ICS
ConversiónTodo se ejecuta en tu navegador: no se sube nada
El `.ics` es el formato común de intercambio de calendarios (RFC 5545): lo que exportan Google Calendar, Outlook y Calendario de Apple. El problema no es que no se pueda abrir, sino que es difícil de leer: cada evento es un bloque `BEGIN:VEVENT`, y lo que quieres («el próximo jueves a las tres, semanal, hasta fin de año») está repartido entre `DTSTART`, `RRULE` y `UNTIL`, con decenas de líneas de definiciones `VTIMEZONE` en medio. Esto lo lee como una tabla. ⚠️ Por defecto no se convierte nada: una hora con `TZID` se muestra tal como la indica el archivo, etiquetada con la zona. Ese es el dato bruto y la conversión es un dato derivado: se listan por separado para que puedas comprobar la conversión. Para convertir, pon un nombre de zona IANA en las opciones (`Asia/Shanghai`, `America/New_York`, `UTC`) y cada evento gana una fila que dice qué instante es ese en la zona elegida, con el desfase UTC de ese día. ⚠️ Esto no es restar un desfase fijo: el desfase viene de la base de datos de zonas horarias de la plataforma, así que se toma en la fecha del propio evento (Nueva York es −05:00 en enero y −04:00 en julio) e incluye los cambios históricos de reglas. Dos casos límite se señalan en vez de resolverse en silencio: una hora de reloj omitida por un cambio de horario de verano no existe en esa zona (no se desplaza a la más próxima), y una repetida por un retroceso corresponde a dos instantes (se usa el primero, y se indica). ⚠️ Aparte, una hora sin `Z` y sin nombre de zona es una hora flotante: la misma hora de reloj se lea donde se lea. Eso es algo distinto de un instante fijo, y aquí se etiqueta como tal. Esas horas llevan una nota explicativa en el resultado. Todo se ejecuta en tu navegador.
Funciones
- Por evento: resumen, inicio y fin, duración, lugar, descripción (opcional), estado y UID
- Organizador y todos los asistentes (el nombre de `CN` si está, si no la dirección)
- ⚠️ Las reglas de repetición se leen como una frase: «cada semana (jue), 4 veces» en vez de `FREQ=WEEKLY;BYDAY=TH;COUNT=4`
- ⚠️ Los modificadores de repetición no reconocidos se añaden tal cual: sin fingir que se entendieron, porque esas condiciones deciden si una ocurrencia concreta sucede o no
- Número de alarmas (los subcomponentes `VALARM`)
- Los eventos de todo el día se marcan como tales, con la duración contada en días
- Resumen: número de eventos, cuántos se repiten, cuántos tienen alarmas y el rango de fechas general
- ⚠️ Trata correctamente el plegado de líneas del RFC 5545 (líneas de 75 octetos, continuaciones que empiezan por espacio): si se hace mal, el texto gana espacios o se parte a mitad de palabra
- ⚠️ Por defecto no convierte nada: informa de la hora que da el archivo y etiqueta la zona o «hora flotante»
- ⚠️ Opcionalmente se puede ver todo en cualquier zona: da un nombre IANA y cada evento gana una fila convertida con el desfase UTC de ese día
- El desfase se toma en la fecha del propio evento, no en la de hoy: dos fechas a cada lado de un cambio de horario dan desfases distintos
- Una hora omitida por un cambio de horario (que no existe en esa zona) y una repetida por un retroceso (dos instantes) se señalan, sin desplazarlas en silencio
- La fila convertida va al lado de la fila tal cual; la original nunca se sustituye
- Se ejecuta por completo en tu navegador; el archivo nunca se sube
Cómo se usa
- Pega el archivo .ics entero, de BEGIN:VCALENDAR a END:VCALENDAR
- Marca «Mostrar también las descripciones» si quieres el cuerpo de los eventos
- El resultado lista cada evento como un bloque, con una nota de zona horaria al final
Preguntas frecuentes
- ¿Por qué no convierte las horas a mi zona horaria?
- Por defecto no convierte, porque lo que indica el archivo es el dato bruto y la conversión se deriva de él: listar los dos lado a lado es lo que te permite comprobar la conversión. Para convertir, pon un nombre de zona IANA en las opciones. ⚠️ Aun así no consiste en restar un desfase fijo: el desfase viene de la base de datos de zonas horarias de la plataforma para esa fecha (las reglas del horario de verano han cambiado muchas veces, así que no es constante; un valor fijo para `Europe/London` va una hora desfasado durante meses del año). Las horas omitidas por un cambio de horario, o repetidas por un retroceso, se señalan en vez de desplazarlas a la vecina, porque una hora equivocada es peor que ninguna.
- ¿Qué es una «hora flotante»?
- Una hora sin sufijo `Z` y sin nombre de zona significa, en iCalendar, «esta hora de reloj en local»: un evento a las 14:00 es a las 14:00 tanto para quien lee en Tokio como en Londres. Eso encaja con cosas como «tómatelo a las 7 de la mañana cada día», donde el lugar es indiferente. Trátala como un instante fijo y conviértela, y obtienes un resultado que parece razonable y está mal. Por eso aquí se etiqueta.
- ¿Por qué algunos resúmenes de repetición terminan con una cadena de `BY...=`?
- Porque son los modificadores que no se entendieron, y a menudo son justo lo que decide si una ocurrencia concreta sucede. Por ejemplo `BYDAY=-1FR` (el último viernes del mes) y `BYSETPOS=-1` (tomar el último del conjunto) se reconocen por separado, pero su combinación necesita un algoritmo de expansión completo para fijarla. Solo las partes reconocidas se convierten en una frase; el resto se añade tal cual. Mejor que veas la condición bruta a que recibas una frase que se lee bien y omite en silencio una restricción.
- ¿Por qué a veces el texto de las descripciones aparece pegado?
- Normalmente eso significa que el archivo fue reescrito por otra herramienta. El RFC 5545 limita la línea a 75 octetos, con el resto plegado en la línea siguiente empezando por un espacio; el desplegado correcto es una concatenación pura, sin separador. Algunas herramientas vuelven a guardar con sus propias reglas de corte, o despliegan insertando un espacio, así que el texto vuelve con espacios de más. Aquí se sigue el estándar: si el espaciado parece raro, la causa es quien generó el archivo.
- ¿Puedo exportarlo a CSV?
- De momento no. El resultado entero se puede copiar, y cada valor de fila se copia por separado, lo cual basta para pegarlo en una hoja de cálculo. Procesar en bloque decenas de archivos de calendario queda fuera de lo que se puede hacer pegando en una página del navegador.
Herramientas relacionadas
Conversor de timestamp
ConversiónConvierte marcas de tiempo Unix en fechas y al revés, con segundos, milisegundos, microsegundos, nanosegundos, FILETIME y zonas horarias.
Calculadora de fechas
ConversiónCalcula los días, semanas o meses entre dos fechas, o suma y resta días, semanas o meses a una fecha. Se eligen en el calendario o se pegan; nada se sube.
Código QR
GeneradoresGenera códigos QR para texto, enlaces, WiFi, tarjetas de contacto o eventos de calendario, con colores ajustables y descarga en PNG o SVG vectorial.
Conversor de bases
ConversiónConvierte números entre binario, octal, decimal, hex, base 36 y base 64, con los seis resultados a la vez y sin perder dígitos en IDs largos.
Analizador de cron
ConversiónExplica una expresión cron campo a campo y calcula las próximas ejecuciones y la anterior; una programación que nunca se dispara lo dice al momento.
Conversor de color
ConversiónConvierte entre HEX, RGB, HSL, HWB, CMYK y los espacios Lab, OKLCH y XYZ, con temperatura de color, inverso, complementario, ANSI y contraste WCAG.