Compartir a través de


Zonas horarias y EWS en Exchange

Descubra cómo funcionan las zonas horarias con la API administrada por EWS y EWS en Exchange.

Las zonas horarias no son algo en que la mayoría de la gente piense mucho. Sin embargo, son un concepto importante al especificar fechas y horas mediante la API administrada por EWS o EWS. La administración errónea de zonas horarias en una API administrada por EWS o una aplicación EWS puede producir resultados inesperados. Controlar las zonas horarias correctamente es fácil, siempre y cuando sepa cómo hacerlo.

Controlar zonas horarias en la API administrada por EWS

Si usa la API administrada por EWS, las zonas horarias se controlan automáticamente. Sin ninguna acción explícita por su parte, la API usa la zona horaria local del equipo del cliente y controla todas las conversiones necesarias en segundo plano. Esto es excelente cuando ese es el efecto deseado, pero tienes otras opciones.

Una opción es establecer la propiedad ExchangeService.TimeZone. Esta propiedad controla la zona horaria de todas las solicitudes ejecutadas por la API administrada por EWS. Esta propiedad es de solo lectura; la única forma de establecerlo es a través del constructor de clase. Si usa el constructor ExchangeService(System.TimeZoneInfo) o ExchangeService(ExchangeVersion, System.TimeZoneInfo), puede especificar una zona horaria específica como un objeto System.TimeZoneInfo. Si usa uno de los otros constructores que no toman un objeto TimeZoneInfo como parámetro, la clase ExchangeService establece la propiedad TimeZone en la actual zona horaria del equipo cliente.

Tanto si establece una zona horaria específica como si la deja como la zona horaria del equipo cliente, todas las fechas y horas se expresan en la zona horaria representada por la propiedad TimeZone. La API administrada por EWS expone todas las propiedades de fecha y hora como estructuras System.DateTime. Por lo tanto, si establece propiedades de fecha y hora, tenga en cuenta que la hora especificada se interpreta según el valor de la propiedad DateTime.Kind en el objeto DateTime. Si el valor de la propiedad Kind se establece en No especificado, el valor de DateTime se interpreta como en la zona horaria especificada por la propiedad TimeZone. Si lee las propiedades de fecha y hora, todas las propiedades DateTime se expresan en esa zona horaria.

Si está creando nuevas citas o reuniones o actualizando citas o reuniones existentes, puede invalidar la zona horaria especificada en la TimeZone para los nuevos objetos Appointment. Sin embargo, exactamente lo que se puede invalidar depende de la versión del esquema EWS a la que se va a dirigir. Para todos los valores de la propiedad ExchangeService.RequestedServerVersion, puede establecer Appointment.StartTimeZone para que use una zona horaria específica para esa cita o reunión. Si usa un valor para la propiedad ExchangeService.RequestedServerVersion mayor que Exchange2007_SP1, también puede establecer la propiedad Appointment.EndTimeZone, lo que le permite especificar una zona horaria para la propiedad Appointment.End. Sin embargo, tenga en cuenta que estas propiedades solo afectan a la interpretación de la fecha y hora de la solicitud de creación. Si recupera la cita, las horas de inicio y finalización se expresarán en la zona horaria especificada por la propiedad TimeZone.

Si va a actualizar citas o reuniones existentes, puede cambiar la zona horaria de un objeto Appointment estableciendo la propiedad StartTimeZone o la propiedad EndTimeZone. Si lo hace, los tiempos aplicables cambiarán en consecuencia. Si ha establecido ExchangeService.RequestedServerVersion en Exchange2007_SP1, no puede establecer la propiedad EndTimeZone; el valor de la propiedad StartTimeZone se usará en su lugar.

Tabla 1. Propiedades de zona horaria en la API administrada por EWS

Propiedad Zona horaria Versión mínima de solicitud de servidor Descripción
TimeZone
Exchange2007_SP1
Si no se establece a través del constructor para la clase ExchangeService, esta propiedad se establece en la zona horaria del equipo cliente. Todas las propiedades DateTime generadas al crear y al recuperar elementos existentes se expresan en esta zona horaria. Esta zona horaria se puede invalidar al crear solicitudes para citas y reuniones estableciendo la propiedad Appointment.StartTimeZone y/o Appointment.EndTimeZone. Si no se reemplaza por la propiedad Appointment.StartTimeZone, esta zona horaria se considera la zona horaria de creación para citas y reuniones.
StartTimeZone
Exchange2007_SP1
Si se establece en nuevos objetos Appointment, esta zona horaria se usa para interpretar las propiedades Appointment.Start y Appointment.ReminderDueBy. Esta zona horaria también se considera la zona horaria de creación del objeto Appointment.
Cuando se recuperan elementos existentes, esta propiedad es solo informativa. Los valores de las propiedades DateTime en la cita existente siempre se expresan en la zona horaria especificada por la propiedad ExchangeService.TimeZone.
EndTimeZone
Exchange2010
Si se establece en nuevos objetos Appointment, esta zona horaria se usa para interpretar la propiedad Appointment.End.
Cuando se recuperan elementos existentes, esta propiedad es solo informativa. Los valores de las propiedades DateTime en la cita existente siempre se expresan en la zona horaria especificada por la propiedad ExchangeService.TimeZone.

Controlar zonas horarias en EWS

Si usa EWS, las zonas horarias no se controlan automáticamente y las cosas son un poco más complicadas. El impacto de las zonas horarias en las solicitudes y respuestas de EWS depende de varios factores:

La zona horaria especificada en el valor de los elementos dateTime puede adoptar tres formas. Puede leer todos los detalles de la parte 2 del esquema XML: Datatypes Second Edition, pero parafraseando:

  • Hora coordinada universal (UTC): Especificado por 'Z'. Por ejemplo: 2014-06-06T19:00:00.000Z

  • Zona horaria específica: Especificado por '+' o '-' seguido de horas y minutos. Por ejemplo: 2014-06-06T19:00:00.000-08:00

  • Sin zona horaria: Especificado por la ausencia de zona horaria. Por ejemplo: 2014-06-06T19:00:00.000

Si una zona horaria está presente en un valor dateTime (UTC o una zona horaria específica), ese valor siempre se interpreta como esa zona horaria. Si no hay ninguna zona horaria, la interpretación del valor depende de la combinación específica de los demás elementos relacionados con la zona horaria.

Tabla 2. Elementos de zona horaria en EWS y sus efectos

RequestServerVersion ¿TimeZoneContext presente? MeetingTimeZone, StartTimeZone o EndTimeZone presentes (solo CalendarItem y MeetingRequest)? dateTime en UTC dateTime en una zona horaria específica dateTime sin zona horaria Zona horaria de creación de citas y reuniones
Exchange2007_SP1

Sí ( MeetingTimeZone )
Interpretado como UTC
Se interpreta como la zona horaria indicada en el valor
Los elementos del elemento CalendarItem o MeetingRequest que contiene el elemento MeetingTimeZone se interpretan como la zona horaria del elemento MeetingTimeZone, todos los demás se interpretan como UTC
Zona horaria en el elemento MeetingTimeZone
Exchange2007_SP1

No
Interpretado como UTC
Se interpreta como la zona horaria indicada en el valor
Interpretado como UTC
UTC
Exchange2007_SP1
No
Sí ( MeetingTimeZone )
Interpretado como UTC
Se interpreta como la zona horaria indicada en el valor
Los elementos del elemento CalendarItem o MeetingRequest que contiene el elemento MeetingTimeZone se interpretan como la zona horaria del elemento MeetingTimeZone, todos los demás se interpretan como UTC
Zona horaria en el elemento MeetingTimeZone
Exchange2007_SP1
No
No
Interpretado como UTC
Se interpreta como la zona horaria indicada en el valor
Interpretado como UTC
UTC
Exchange2010 y versiones posteriores

Sí ( StartTimeZone y/o EndTimeZone )
Interpretado como UTC
Se interpreta como la zona horaria indicada en el valor
Si el elemento StartTimeZone está presente, el valor de los elementos Start y ReminderDueBy se interpreta como la zona horaria del elemento StartTimeZone. De lo contrario, el valor de esos elementos se interpreta como la zona horaria en el elemento TimeZoneContext.
Si el elemento EndTimeZone está presente, el valor del elemento Start se interpreta como la zona horaria del elemento EndTimeZone. De lo contrario, el valor del elemento End se interpreta como la zona horaria en el elemento TimeZoneContext.
Los elementos fuera de CalendarItem o MeetingRequest se interpretan como la zona horaria en el elemento TimeZoneContext.
Zona horaria en el elemento StartTimeZone si está presente, zona horaria en el elemento TimeZoneContext si no es así
Exchange2010 y versiones posteriores

No
Interpretado como UTC
Se interpreta como la zona horaria indicada en el valor
Se interpreta como la zona horaria en el elemento TimeZoneContext
Zona horaria en el elemento TimeZoneContext
Exchange2010 y versiones posteriores
No
Sí ( StartTimeZone y/o EndTimeZone )
Interpretado como UTC
Se interpreta como la zona horaria indicada en el valor
Si el elemento StartTimeZone está presente, el valor de los elementos Start y ReminderDueBy se interpreta como la zona horaria del elemento StartTimeZone. De lo contrario, el valor de esos elementos se interpreta como UTC.
Si el elemento EndTimeZone está presente, el valor del elemento Start se interpreta como la zona horaria del elemento EndTimeZone. De lo contrario, el valor del elemento End se interpreta como UTC.
Los elementos fuera deCalendarItem o MeetingRequest se interpretan como UTC.
Zona horaria en el elemento StartTimeZone si está presente, UTC si no es así
Exchange2010 y versiones posteriores
No
No
Interpretado como UTC
Se interpreta como la zona horaria indicada en el valor
Interpretado como UTC
UTC

Al interpretar las respuestas del servidor, siempre debe comprobar el valor de cada elemento e interpretar el valor en consecuencia. Exchange incluirá siempre una zona horaria (UTC o una zona horaria específica) en el valor.

Consideraciones adicionales de zona horaria al crear citas y reuniones

Al crear una cita o una reunión, la zona horaria que se aplica a la hora de inicio se considera la zona horaria de creación de la cita. Además de controlar cómo se interpretan las fechas y horas cuando se crea una cita o una reunión, la zona horaria de creación tiene los siguientes efectos en el elemento:

  • Si el elemento es un evento de todo el día, puede mostrarse de forma inesperada si se ve desde un cliente que usa una zona horaria diferente a la zona horaria de creación. Esto se debe a que cuando se crea un evento de todo el día, la hora de inicio y finalización de los eventos de todo el día se ajusta a la medianoche de la zona horaria de creación. Esa hora se mostrará como una hora distinta de la medianoche en una zona horaria diferente, por lo que puede que el elemento parezca abarcar días adicionales. Debido a esto, se recomienda usar la zona horaria configurada para el cliente de calendario principal del usuario para crear eventos de todo el día cuando sea posible.

  • Si el elemento es una reunión, la zona horaria de creación se mostrará en la barra de información de Outlook en las solicitudes de reunión recibidas por los asistentes, si esa zona horaria difiere de la zona horaria de su cliente.

En esta sección

Vea también