3 votos

¿Arreglar la invitación aceptada con zona horaria "flotante"?

Estoy usando OS X 10.8.2, iOS 6.0, y un calendario de iCloud compartido entre los dos. Tengo activado el soporte de zonas horarias. Cuando acepto una invitación de calendario ics por correo electrónico, aparece en el calendario de iCloud con "zona horaria: flotante". La invitación se originó en EST y yo estoy en PDT, por lo que aparece en mis calendarios de iOS y OSX con tres horas de retraso.

Ninguna de las aplicaciones de calendario me permite cambiar la zona horaria del evento. Mirando los datos brutos del ics, veo que fue creado por MS Exchange Server y veo que especifica una zona horaria:

BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:Microsoft Exchange Server 2007
VERSION:2.0
BEGIN:VTIMEZONE
TZID:(UTC-05:00) Eastern Time (US & Canada)
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT

Posiblemente se podría hacer algo por parte del creador o del administrador de Exchange, pero es una imposición grave pedir a la gente que vaya a la caza de problemas de configuración por lo que les parecerá un problema por mi parte.

¿Cómo puedo arreglar esto? ¿Hay alguna forma de forzar a iOS, OS X o el sitio web de iCloud a corregir la zona horaria?

2voto

zippy Puntos 1215

La respuesta es sí. He escrito un AppleScript que convertirá el TZID incorrecto producido por Exchange en uno con el formato adecuado. Esto significa que el arreglo es sólo en Mac OS.

Tengo un post sobre esto, https://thefragens.com/ical-exchange-time-zone-fix-chapter-3/

Empecemos por el principio. A veces la integración de un Mac en el entorno corporativo es un poco difícil y requiere un poco de ingenio. Esto es especialmente cierto cuando se trata de Exchange. Las versiones actuales de iCal e iCal Server son compatibles con CalDAV e iCalendar. Sólo Outlook 2007 es compatible con CalDAV e iCalendar. Las versiones anteriores de Outlook no son compatibles y no funcionan bien con otras aplicaciones de calendario. Aquí está la información zona horaria (TZID) y la especificación de cómo debe formatearse . Puedes ver al mirarlo que el TZID que produce Outlook no es compatible.

Una rápida búsqueda en Google muestra un artículo o dos que lo explican muy bien.

He descubierto que hay al menos 3 tipos diferentes de invitaciones que pueden ser enviadas por Exchange/Outlook.

  1. METHOD:REQUEST - Se trata del habitual correo electrónico en el que se solicita la asistencia a una reunión.
  2. METHOD:PUBLISH - Se trata esencialmente de un anuncio de publicación de un evento. No le pide que responda.
  3. METHOD:CANCEL - Este es un aviso de cancelación de un evento.

Además, he comprobado que los correos electrónicos que contienen estas invitaciones están formados de al menos 3 maneras diferentes. A veces el evento del calendario está dentro del cuerpo del mensaje y está codificado con Content-Transfer-Encoding en cualquiera de los dos casos 8bit o quoted-printable . Siempre el .ics se adjunta el archivo.

Mi script hace lo siguiente:

  1. Analiza el mensaje para extraer los datos del calendario del cuerpo del mensaje o del .ics apéndice.
  2. A continuación, se calcula si la invitación es del tipo METHOD:REQUEST , METHOD:PUBLISH o METHOD:CANCEL .
  3. Si la invitación es de uno de los dos primeros tipos. La zona horaria se fija y el evento se importa a iCal. Es posible que tenga que seleccionar en qué calendario se importará el evento.
  4. Si la invitación es del tipo METHOD:CANCEL entonces el script localizará el evento correspondiente y establecerá su estado como cancelado.

    • Tendrá que eliminar manualmente el evento. En iCal aparecerá con un estilo de letra blanco tachado.
    • Los eventos que se repiten parecen tener todos el mismo UID (identificador único).

No sé por qué. Cada evento que se repita se marcará así como cancelado. A continuación, borrará manualmente el evento específico y ejecutará manualmente el script de nuevo mientras se selecciona el mensaje de cancelación. Esto restablecerá el resto de los eventos que se repiten como confirmados. Sí, sé que esto es un poco de un kludge pero no tengo un método mejor.

  1. Analizará el mensaje para permitir las invitaciones de varios servidores de Exchange.

Mi guión, ahora renombrado iCal-Invite-Fix.scpt , tendrá que personalizarse para cada servidor de Exchange del que reciba invitaciones. Hay 3 propiedades al principio del script. Son las siguientes exchange_fragment , ical_tzid y myCalendar . Estas dos primeras propiedades son listas y el orden de los elementos es crucial. El elemento específico (posición en la lista) de cada lista debe corresponder a cada uno.

  • exchange_fragment es un fragmento único del TZID que envía su servidor Exchange.
  • ical_tzid es la zona horaria del servidor Exchange en el formato adecuado.
  • Esto significa que no hay espacios, aunque los espacios se sustituyen automáticamente por el guión bajo '_'.
  • Por ejemplo, estoy en el sur de California y la zona horaria correcta debería escribirse como US/Pacific o America/Los_Angeles . Puede encontrar esta información seleccionando el menú desplegable de zonas horarias en la esquina superior derecha de la ventana de iCal y seleccionando Other... . Si busca en la esquina superior derecha de iCal la barra de menú de la zona horaria, el último ejemplo aparecerá como America/Los Angeles .
  • myCalendar es el nombre del calendario que normalmente recibe los eventos. Es necesario para que la cancelación funcione.

enter image description here

Como muestra la imagen anterior, ahora sólo hay 2 propiedades, ambas son listas. Estas listas funcionan juntas como un array; lo que significa que el orden de los elementos de la lista es crucial.

  • exchange_fragment contiene fragmentos únicos del TZID que envía el servidor de Exchange.
  • ical_tzid contiene la información tzid que iCal espera ver.

Guarde el script y configúrelo para que se ejecute desde una regla de correo o como yo lo llamo desde el menú System AppleScript. Deberá guardar el script en la carpeta ~/Library//Applications/Mail/. Cree esta carpeta si no existe.

Para configurar el script para que se ejecute automáticamente, deberá crear una nueva regla de correo como se indica a continuación.

  1. Correo -> Preferencias -> Reglas -> Añadir regla
  2. Descripción "iCal Invite Fix"
  3. Si se cumple "alguna" de las siguientes condiciones:
    • "Cualquier nombre de archivo adjunto" "termina con" ".ics"
  4. Realice las siguientes acciones:
    • Ejecute AppleScript "~/Library/scripts/Applications/Mail/iCal-Invite-Fix.scpt"
  5. Haga clic en "Aceptar" y luego en "Aplicar".

enter image description here

También puede ejecutar el script manualmente desde el menú script del sistema. Para instalar este menú. Abra el menú /Applications/AppleScript/AppleScript Utility.app y comprueba el Show Script menu in menu bar caja. Si pones el script en la ubicación de la carpeta indicada anteriormente, ahora será visible cuando Mail.app sea la aplicación actual.

Descargar el iCal-Invite-Fix script .

Por favor, hazme saber si hay algún problema o necesitas ayuda para configurarlo. El script no fue enteramente mi creación y el mérito es también de otros . Estoy seguro de que cualquier error es probablemente mío ;-)

Actualizado el 28/12/2008 : Se ha añadido la posibilidad de utilizar un único script con varios servidores Exchange. La contrapartida es una configuración ligeramente más compleja.

0 votos

Gracias por la respuesta. He leído la entrada de tu blog y he ojeado el código script. Parece que necesitaría una copia del script por servidor Exchange de origen, ¿correcto? Pero no me queda claro cómo establecer el exchange_fragment y ical_tzid propiedades en el script. Por ejemplo, ¿qué es "un fragmento único del TZID del servidor de Exchange"?

0 votos

La copia más reciente del script funcionará con varios servidores Exchange. Tienes que editar el script para añadir un fragmento único de cada servidor Exchange y su correspondiente TZID "correcto". En su exchange_fragment es "Hora del Este" y ical_tzid es "US/Eastern".

0 votos

Creo que ya lo tengo funcionando, gracias. Tuve que hacer varios cambios para evitar los problemas de la caja de arena, así que intentaré ponerme en contacto contigo fuera de línea para pasártelos.

-2voto

Dave LeBlond Puntos 1

He utilizado Outlook para teleconferencias en muchas zonas horarias en mi entorno PC Windows durante muchos años. Nunca he tenido un problema con una convocatoria de reunión que se haya programado incorrectamente debido a que el evento está programado en una zona horaria diferente a la mía. Outlook siempre mira la invitación a la reunión, ve que está programada en una zona horaria diferente y luego programa el evento para que se produzca a la hora adecuada.

Ahora tengo un iPhone y configuro iCloud para que funcione con mi calendario de Outlook. De repente, el calendario de iCloud parece realmente estúpido. No se molesta en darse cuenta de que los eventos se están programando en una zona horaria diferente y los programa a la hora que fuera en la zona horaria desde la que se enviaron. Así que estoy una hora tarde o temprano para mis teleconferencias dependiendo de si fueron enviadas desde alguien al este o al oeste de mí respectivamente. Esto es bastante tonto. Esperaba más de Apple.

He jugado con el soporte de la zona horaria tanto en iClound como en mi teléfono I. No ha servido de nada. He leído todo el material sobre cómo las zonas horarias son tan complejas y difíciles como si el problema fuera insuperable. Esto es un montón de basura. Outlook ha estado haciendo esto durante años sin problemas.

Me encanta mi iPhone, pero me decepciona mucho que Apple no se ponga las pilas con esto.

1 votos

Hola y bienvenido a Ask Different. Publicar en la sección de respuestas está reservado específicamente para publicar respuestas directas a la pregunta que se hace. El formato de preguntas y respuestas de Stack Exchange es diferente del típico foro, no está pensado para discutir o comentar. Para más información, consulta nuestro Sección de ayuda . Considera la posibilidad de eliminar esto ya que probablemente seguirá atrayendo votos negativos por no ser una respuesta directa a la pregunta o por mejorarla para que sea una respuesta directa.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X