Fuseaux horaires et EWS dans Exchange
Découvrez comment les fuseaux horaires fonctionnent avec l'API gérée par EWS et EWS dans Exchange.
Les fuseaux horaires ne sont pas une chose à laquelle la plupart des gens réfléchissent beaucoup. Cependant, il s'agit d'un concept important lorsque vous spécifiez des dates et des heures à l'aide de l'API gérée par le EWS ou du EWS. Une mauvaise gestion des fuseaux horaires dans une API gérée par EWS ou une application EWS peut donner des résultats inattendus. Il est facile de gérer correctement les fuseaux horaires, pour autant que vous sachiez comment faire.
Gestion des fuseaux horaires dans l'API gérée par le EWS
Si vous utilisez l'API gérée par le EWS, les fuseaux horaires sont, pour la plupart, gérés automatiquement. Sans aucune action explicite de votre part, l'API utilise le fuseau horaire local de l'ordinateur client et gère toutes les conversions nécessaires en coulisse. C’est très bien lorsque c’est l’effet souhaité, mais vous avez d’autres options.
Une option consiste à définir la propriété ExchangeService.TimeZone. Cette propriété contrôle le fuseau horaire pour toutes les demandes exécutées par l'API gérée par EWS. Cette propriété est en lecture seule . La seule façon de la définir est via le constructeur de classe. Si vous utilisez le constructeur ExchangeService(System.TimeZoneInfo) ou ExchangeService(ExchangeVersion, System.TimeZoneInfo), vous pouvez spécifier un fuseau horaire spécifique comme un objet System.TimeZoneInfo. Si vous utilisez l'un des autres constructeurs qui ne prennent pas un objet TimeZoneInfo comme paramètre, la classe ExchangeService définit la propriété TimeZone au fuseau horaire actuel de l'ordinateur client.
Que vous définissiez un fuseau horaire spécifique ou que vous laissiez le fuseau horaire de l'ordinateur client, toutes les dates et heures sont exprimées dans le fuseau horaire représenté par la propriété TimeZone. L'API gérée par le EWS expose toutes les propriétés de date/heure sous forme de structures System.DateTime. Par conséquent, si vous définissez des propriétés date/heure, n’oubliez pas que l’heure que vous spécifiez est interprétée en fonction de la valeur de la propriété DateTime.Kind sur l’objet DateTime . Si la valeur de la propriété Kind est définie sur Unspecified, la valeur de la DateTime est interprétée comme étant dans le fuseau horaire spécifié par la propriété TimeZone. Si vous lisez les propriétés date/heure, toutes les propriétés DateTime sont exprimées dans ce fuseau horaire.
Si vous créez de nouveaux rendez-vous ou réunions ou si vous mettez à jour des rendez-vous ou réunions existants, vous avez la possibilité de remplacer le fuseau horaire spécifié dans le champ TimeZone pour les nouveaux objets Rendez-vous. Toutefois, ce que vous pouvez remplacer dépend de la version du schéma EWS que vous visez. Pour toutes les valeurs de la propriété ExchangeService.RequestedServerVersion, vous pouvez définir la propriété Appointment.StartTimeZone pour utiliser un fuseau horaire spécifique pour ce rendez-vous ou cette réunion. Si vous utilisez une valeur pour la propriété ExchangeService.RequestedServerVersion supérieure à Exchange2007_SP1, vous pouvez également définir la propriété Appointment.EndTimeZone, ce qui vous permet de spécifier un fuseau horaire pour la propriété Appointment.End. Toutefois, gardez à l’esprit que ces propriétés affectent uniquement l’interprétation de la date et de l’heure de la demande de création. Si vous récupérez le rendez-vous, les heures de début et de fin seront toujours exprimées dans le fuseau horaire spécifié par la propriété TimeZone.
Si vous mettez à jour des rendez-vous ou des réunions existants, vous pouvez modifier le fuseau horaire d'un objet Appointment en définissant la propriété StartTimeZone et/ou la propriété EndTimeZone. Ainsi, les heures applicables changent en conséquence. Si vous avez défini ExchangeService.RequestedServerVersion à Exchange2007_SP1, vous ne pouvez pas définir la propriété EndTimeZone; la valeur de la propriété StartTimeZone sera utilisée à sa place.
Tableau 1. Propriétés de fuseau horaire dans l’API managée EWS
Propriété de fuseau horaire | Version de demande minimale du serveur | Description |
---|---|---|
TimeZone |
Exchange2007_SP1 |
Si elle n'est pas définie via le constructeur de la classe ExchangeService, cette propriété est définie sur le fuseau horaire de l'ordinateur client. Toutes les propriétés DateTime lors de la création d'éléments et lors de la récupération d'éléments existants sont exprimées dans ce fuseau horaire. Ce fuseau horaire peut être remplacé dans les demandes de création de rendez-vous et de réunions en définissant la propriété Appointment.StartTimeZone et/ou Appointment.EndTimeZone. S'il n'est pas remplacé par la propriété Appointment.StartTimeZone, ce fuseau horaire est considéré comme le fuseau horaire de création des rendez-vous et des réunions. |
StartTimeZone |
Exchange2007_SP1 |
S'il est défini sur les nouveaux objets Appointment, ce fuseau horaire est utilisé pour interpréter les propriétés Appointment.Start et Appointment.ReminderDueBy. Ce fuseau horaire est également considéré comme le fuseau horaire de création de l'objet Appointment. Lors de la récupération d'éléments existants, cette propriété est uniquement informative. Les valeurs des propriétés DateTime sur les rendez-vous existants sont toujours exprimées dans le fuseau horaire spécifié par la propriété ExchangeService.TimeZone. |
EndTimeZone |
Exchange2010 |
S'il est défini sur les nouveaux objets Appointment, ce fuseau horaire est utilisé pour interpréter la propriété Appointment.End. Lors de la récupération d'éléments existants, cette propriété est uniquement informative. Les valeurs des propriétés DateTime sur les rendez-vous existants sont toujours exprimées dans le fuseau horaire spécifié par la propriété ExchangeService.TimeZone. |
Gestion des fuseaux horaires dans le SAP
Si vous utilisez le SAP, les fuseaux horaires ne sont pas gérés automatiquement pour vous, et les choses sont un peu plus compliquées. L'impact des fuseaux horaires sur les demandes et les réponses du SAP dépend d'un certain nombre de facteurs :
La version d'Exchange spécifiée dans l'élément RequestServerVersion.
Le fuseau horaire spécifié dans l'élément TimeZoneContext (s'il est présent).
Le fuseau horaire spécifié dans les éléments MeetingTimeZone, StartTimeZone ou EndTimeZone (s'ils sont présents dans les rendez-vous ou les réunions).
Le fuseau horaire spécifié dans les éléments XML dateTime (le cas échéant).
Le fuseau horaire spécifié dans la valeur des éléments dateTime peut prendre trois formes. Vous pouvez lire tous les détails dans XML Schema Part 2 : Datatypes Second Edition, mais pour paraphraser :
UTC (Temps universel coordonné) : Spécifié par « Z ». Par exemple,
2014-06-06T19:00:00.000Z
Fuseau horaire spécifique : Spécifié par « + » ou « - » suivi des heures et des minutes. Par exemple,
2014-06-06T19:00:00.000-08:00
Aucun fuseau horaire : Spécifié par l’absence de tout fuseau horaire. Par exemple,
2014-06-06T19:00:00.000
Si un fuseau horaire est présent dans une valeur dateTime (soit UTC, soit un fuseau horaire spécifique), cette valeur est toujours interprétée comme ce fuseau horaire. Si aucun fuseau horaire n'est présent, l'interprétation de la valeur dépend de la combinaison spécifique des autres éléments liés au fuseau horaire.
Tableau 2. Éléments de fuseau horaire dans EWS et leurs effets
RequestServerVersion | TimeZoneContext présent ? | MeetingTimeZone, StartTimeZone ou EndTimeZone présents (CalendarItem et MeetingRequest uniquement) ? | dateTime en UTC | dateTime dans un fuseau horaire spécifique | dateTime sans fuseau horaire | Fuseau horaire de création de rendez-vous et de réunion |
---|---|---|---|---|---|---|
Exchange2007_SP1 |
Oui |
Oui ( MeetingTimeZone ) |
Interprété comme UTC |
Interprété comme le fuseau horaire indiqué dans la valeur |
Les éléments de l'élément CalendarItem ou MeetingRequest qui contiennent l'élément MeetingTimeZone sont interprétés comme le fuseau horaire de l'élément MeetingTimeZone, tous les autres étant interprétés comme UTC. |
Fuseau horaire dans l’élément MeetingTimeZone |
Exchange2007_SP1 |
Oui |
Non |
Interprété comme UTC |
Interprété comme le fuseau horaire indiqué dans la valeur |
Interprété comme UTC |
UTC |
Exchange2007_SP1 |
Non |
Oui ( MeetingTimeZone ) |
Interprété comme UTC |
Interprété comme le fuseau horaire indiqué dans la valeur |
Les éléments de l'élément CalendarItem ou MeetingRequest qui contiennent l'élément MeetingTimeZone sont interprétés comme le fuseau horaire de l'élément MeetingTimeZone, tous les autres étant interprétés comme UTC. |
Fuseau horaire dans l’élément MeetingTimeZone |
Exchange2007_SP1 |
Non |
Non |
Interprété comme UTC |
Interprété comme le fuseau horaire indiqué dans la valeur |
Interprété comme UTC |
UTC |
Exchange2010 et les ultérieures |
Oui |
Oui ( StartTimeZone et/ou EndTimeZone ) |
Interprété comme UTC |
Interprété comme le fuseau horaire indiqué dans la valeur |
Si l'élément StartTimeZone est présent, la valeur des éléments Start et ReminderDueBy est interprétée comme le fuseau horaire de l'élément StartTimeZone. Sinon, la valeur de ces éléments est interprétée comme le fuseau horaire dans l'élément TimeZoneContext. Si l'élément EndTimeZone est présent, la valeur de l'élément Start est interprétée comme le fuseau horaire de l'élément EndTimeZone. Sinon, la valeur de l'élément End est interprétée comme le fuseau horaire dans l'élément TimeZoneContext. Les éléments extérieurs à CalendarItem ou MeetingRequest sont interprétés comme le fuseau horaire dans l'élément TimeZoneContext. |
Fuseau horaire dans l'élément StartTimeZone s'il est présent, sinon dans l'élément TimeZoneContext. |
Exchange2010 et les ultérieures |
Oui |
Non |
Interprété comme UTC |
Interprété comme le fuseau horaire indiqué dans la valeur |
Interprété comme le fuseau horaire dans l’élément TimeZoneContext |
Fuseau horaire dans l’élément TimeZoneContext |
Exchange2010 et les ultérieures |
Non |
Oui ( StartTimeZone et/ou EndTimeZone ) |
Interprété comme UTC |
Interprété comme le fuseau horaire indiqué dans la valeur |
Si l'élément StartTimeZone est présent, la valeur des éléments Start et ReminderDueBy est interprétée comme le fuseau horaire de l'élément StartTimeZone. Sinon, la valeur de ces éléments est interprétée comme UTC. Si l'élément EndTimeZone est présent, la valeur de l'élément Start est interprétée comme le fuseau horaire de l'élément EndTimeZone. Sinon, la valeur de l’élément End est interprétée comme UTC. Les éléments en dehors de CalendarItem ou MeetingRequest sont interprétés comme UTC. |
Fuseau horaire dans l’élément StartTimeZone s’il est présent, UTC si ce n’est pas le cas |
Exchange2010 et les ultérieures |
Non |
Non |
Interprété comme UTC |
Interprété comme le fuseau horaire indiqué dans la valeur |
Interprété comme UTC |
UTC |
Lorsque vous interprétez les réponses du serveur, vous devez toujours vérifier la valeur de chaque élément et l'interpréter en conséquence. Exchange inclura toujours un fuseau horaire (UTC ou un fuseau horaire spécifique) dans la valeur.
Considérations supplémentaires sur le fuseau horaire lors de la création de rendez-vous et de réunions
Lorsque vous créez un rendez-vous ou une réunion, le fuseau horaire qui s'applique à l'heure de début est considéré comme le fuseau horaire de création du rendez-vous. En plus de contrôler la façon dont la date et l'heure sont interprétées lors de la création d'un rendez-vous ou d'une réunion, le fuseau horaire de création a les effets suivants sur l'élément :
Si l'élément est un événement qui se déroule toute la journée, il peut s'afficher de manière inattendue s'il est consulté depuis un client qui utilise un fuseau horaire différent de celui de la création. En effet, lorsqu'un événement d'une journée est créé, les heures de début et de fin des événements d'une journée sont ajustées à minuit dans le fuseau horaire de création. Cette heure apparaîtra comme une heure autre que minuit dans un fuseau horaire différent, de sorte que l'article peut sembler s'étendre sur plusieurs jours. Pour cette raison, nous vous recommandons d'utiliser le fuseau horaire configuré pour le principal client de calendrier de l'utilisateur afin de créer des événements pour toute la journée lorsque cela est possible.
Si l’élément est une réunion, le fuseau horaire de création s’affiche dans la barre d’informations Outlook sur les demandes de réunion reçues par les participants, si ce fuseau horaire diffère du fuseau horaire de leur client.
Dans cette section
Créer des rendez-vous dans un fuseau horaire spécifique en utilisant EWS dans Exchange
Mettre à jour le fuseau horaire pour un rendez-vous en utilisant EWS dans Exchange