Mettre à jour le fuseau horaire pour un rendez-vous à l’aide d’EWS dans ExchangeUpdate the time zone for an appointment by using EWS in Exchange

Découvrez comment mettre à jour le fuseau horaire d’un rendez-vous ou d’une réunion existant à l’aide de l’API managée EWS ou d’EWS dans Exchange.Learn how to update the time zone for an existing appointment or meeting by using the EWS Managed API or EWS in Exchange.

Lorsqu’un rendez-vous ou une réunion est créé dans un calendrier Exchange, le fuseau horaire utilisé pour spécifier les heures de début et de fin est enregistré comme fuseau horaire de création pour le rendez-vous.When an appointment or meeting is created on an Exchange calendar, the time zone used to specify the start and end times is saved as the creation time zone for the appointment. Vous pouvez modifier ce fuseau horaire à l’aide de l’API managée EWS ou d’EWS.You can change that time zone by using the EWS Managed API or EWS. Toutefois, la modification du fuseau horaire sur un rendez-vous a d’autres effets sur l’heure de début et de fin du rendez-vous.However, changing the time zone on an appointment has other effects on the start and end time of the appointment.

Les valeurs d’heure sont stockées sur le serveur Exchange en temps universel coordonné (UTC).Time values are stored on the Exchange server in Coordinate Universal Time (UTC). Par conséquent, si un rendez-vous est défini pour commencer à 1:00 (13:00) dans le fuseau horaire est (UTC-05:00), cette valeur est stockée en tant que 6:00 (18:00) sur le serveur, en supposant que le fuseau horaire est en phase standard.So if an appointment is set to start at 1:00 PM (13:00) in the Eastern time zone (UTC-05:00), that value is stored as 6:00 PM (18:00) on the server, assuming that the time zone is in its standard time phase. Lorsque ce rendez-vous est affiché dans d’autres fuseaux horaires, le nombre d’heures approprié est ajouté ou soustrait de la valeur UTC pour déterminer le temps spécifique au fuseau horaire.When that appointment is viewed in other time zones, the appropriate number of hours is added or subtracted from the UTC value to determine the time zone-specific time. Par exemple, si un rendez-vous a une heure de début au 1:00 PM (6:00 PM UTC) et qu’il est affiché à partir d’un client dans le fuseau horaire Pacifique (UTC-08:00), l’heure de début spécifique à la zone horaire de ce client serait de 10:00 AM (18:00-08:00).For example, if an appointment has a start time at 1:00 PM Eastern (6:00 PM UTC), and is viewed from a client in the Pacific time zone (UTC-08:00), the time-zone specific start time for that client would be 10:00 AM (18:00 - 08:00).

Lorsque vous mettez à jour le fuseau horaire du rendez-vous sans mettre à jour l’heure de début et de fin, le serveur met à jour les valeurs UTC stockées sur le serveur pour conserver l’heure de début et de fin en fonction des mêmes fuseaux horaires.When you update the time zone of the appointment without updating the start and end time, the server updates the UTC values stored on the server to keep the start and end time as the same time zone-specific times. Par exemple, prenons le rendez-vous 1:00 PM.For example, consider the 1:00 PM Eastern appointment. L’heure est stockée en tant que 18:00 UTC sur le serveur.The time is stored as 18:00 UTC on the server. Si le fuseau horaire du rendez-vous est remplacé par le fuseau horaire Pacifique, le serveur passe l’heure de début au 1:00 PM (21:00 UTC).If the time zone of the appointment is changed to the Pacific time zone, the server shifts the start time to 1:00 PM Pacific (21:00 UTC).

Vous pouvez modifier ce comportement en définissant explicitement les heures de début et de fin.You can change this behavior by explicitly setting the start and end times.

Mise à jour du fuseau horaire sur un rendez-vous existant à l’aide de l’API managée EWSUpdating the time zone on an existing appointment by using the EWS Managed API

Dans l’exemple suivant, l’API managée EWS est utilisée pour mettre à jour le fuseau horaire d’un rendez-vous existant vers le fuseau horaire central en mettant à jour les propriétés appointment . StartTimeZone et appointment . EndTimeZone .In the following example, the EWS Managed API is used to update the time zone on an existing appointment to the Central time zone by updating the Appointment.StartTimeZone and Appointment.EndTimeZone properties. Si le paramètre shiftAppointnment est défini sur true, le code ne définit pas explicitement les heures de début et de fin sur le rendez-vous.If the shiftAppointnment parameter is set to true, the code does not explicitly set the start and end times on the appointment. Dans ce cas, le serveur déplace les heures de début et de fin afin de les conserver en même temps que les heures relatives dans le nouveau fuseau horaire.In this case, the server will shift the start and end times to keep them at the same time zone-relative times in the new time zone. Si la valeur est false, le code convertit les heures de début et de fin de manière explicite afin de conserver simultanément le rendez-vous en UTC.If set to false, the code converts the start and end times explicitly to keep the appointment at the same time in UTC.

Cet exemple part du principe que l’objet ExchangeService a été initialisé avec des valeurs valides dans les informations d’identification et les propriétés de l' URL .This example assumes that the ExchangeService object has been initialized with valid values in the Credentials and Url properties.

static void UpdateAppointmentTimeZone(ExchangeService service, ItemId apptId, bool shiftAppointment)
{
    PropertySet includeTimeZones = new PropertySet(AppointmentSchema.Subject,
                                                   AppointmentSchema.Start,
                                                   AppointmentSchema.ReminderDueBy,
                                                   AppointmentSchema.End,
                                                   AppointmentSchema.StartTimeZone,
                                                   AppointmentSchema.EndTimeZone);
    Appointment apptToUpdate;
    // Load the existing appointment.
    // This will result in a call to EWS.
    try
    {
        apptToUpdate = Appointment.Bind(service, apptId, includeTimeZones);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error retrieving existing appointment: {0}", ex.Message);
        return;
    }
    Console.WriteLine("Before update:");
    // Output the current start, reminder, end, and time zones.
    Console.WriteLine("  Start: {0}", apptToUpdate.Start);
    Console.WriteLine("  Start time zone: {0}", apptToUpdate.StartTimeZone.DisplayName);
    Console.WriteLine("  Reminder: {0}", apptToUpdate.ReminderDueBy);
    Console.WriteLine("  End: {0}", apptToUpdate.End);
    Console.WriteLine("  End time zone: {0}", apptToUpdate.EndTimeZone.DisplayName);
    // Retrieve the Central time zone.
    TimeZoneInfo centralTZ = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
    // Update the time zones on the appointment.
    apptToUpdate.StartTimeZone = centralTZ;
    apptToUpdate.EndTimeZone = centralTZ;
    if (!shiftAppointment)
    {
        // Set the start and end times explicitly so that the appointment
        // will start and end at the same UTC time.
        // Convert the times to then Central time zone. This
        // will keep them at the same time in UTC.
        // For example, 1:00 PM Eastern becomes 12:00 PM Central.
        DateTime newStartTime = TimeZoneInfo.ConvertTime(
            apptToUpdate.Start, centralTZ);
        DateTime newEndTime = TimeZoneInfo.ConvertTime(
            apptToUpdate.End, centralTZ);
        apptToUpdate.Start = newStartTime;
        apptToUpdate.End = newEndTime;
    }
    try
    {
        // Save the changes. This will result in a call to EWS.
        apptToUpdate.Update(ConflictResolutionMode.AlwaysOverwrite, 
            SendInvitationsOrCancellationsMode.SendToNone);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error updating appointment: {0}", ex.Message);
        return;
    }
    // Now rebind to the appointment to get the new values.
    Appointment apptAfterUpdate;
    
    try
    {
        // This will result in a call to EWS.
        apptAfterUpdate = Appointment.Bind(service, apptId, includeTimeZones);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error retrieving existing appointment: {0}", ex.Message);
        return;
    }
    Console.WriteLine("After update:");
    // Output the current start, reminder, end, and time zones.
    Console.WriteLine("  Start: {0}", apptAfterUpdate.Start);
    Console.WriteLine("  Start time zone: {0}", apptAfterUpdate.StartTimeZone.DisplayName);
    Console.WriteLine("  Reminder: {0}", apptAfterUpdate.ReminderDueBy);
    Console.WriteLine("  End: {0}", apptAfterUpdate.End);
    Console.WriteLine("  End time zone: {0}", apptAfterUpdate.EndTimeZone.DisplayName);
}

Lorsque l’exemple est utilisé pour mettre à jour un rendez-vous qui commence à 1:00 PM et se termine à 2:00 PM est, avec le paramètre shiftAppointment défini sur true et la propriété ExchangeService. TimeZone définie sur le fuseau horaire est, le résultat se présente comme suit.When the example is used to update an appointment that starts at 1:00 PM Eastern and ends at 2:00 PM Eastern, with the shiftAppointment parameter set to true, and the ExchangeService.TimeZone property set to the Eastern time zone, the output looks like the following.

Before update:
  Start: 6/20/2014 1:00:00 PM
  Start time zone: (UTC-05:00) Eastern Time (US & Canada)
  Reminder: 6/20/2014 1:00:00 PM
  End: 6/20/2014 2:00:00 PM
  End time zone: (UTC-05:00) Eastern Time (US & Canada)
After update:
  Start: 6/20/2014 2:00:00 PM
  Start time zone: (UTC-06:00) Central Time (US & Canada)
  Reminder: 6/20/2014 2:00:00 PM
  End: 6/20/2014 3:00:00 PM
  End time zone: (UTC-06:00) Central Time (US & Canada)

Lorsque l’exemple est utilisé pour mettre à jour le même rendez-vous avec le paramètre shiftAppointment défini sur false et que la propriété TimeZone est de nouveau définie sur le fuseau horaire est, le résultat semble un peu différent.When the example is used to update the same appointment with the shiftAppointment parameter set to false, and with the TimeZone property again set to the Eastern time zone, the output looks a little different.

Before update:
  Start: 6/20/2014 1:00:00 PM
  Start time zone: (UTC-05:00) Eastern Time (US & Canada)
  Reminder: 6/20/2014 1:00:00 PM
  End: 6/20/2014 2:00:00 PM
  End time zone: (UTC-05:00) Eastern Time (US & Canada)
After update:
  Start: 6/20/2014 1:00:00 PM
  Start time zone: (UTC-06:00) Central Time (US & Canada)
  Reminder: 6/20/2014 1:00:00 PM
  End: 6/20/2014 2:00:00 PM
  End time zone: (UTC-06:00) Central Time (US & Canada)

Notez que les heures de début et de fin n’ont pas changé.Notice that the start and end times did not change. En effet, les heures sont interprétées dans le fuseau horaire est (car la propriété TimeZone est définie sur le fuseau horaire est) et les valeurs d’heure ont été mises à jour pour empêcher le changement de rendez-vous.This is because the times are being interpreted in the Eastern time zone (because the TimeZone property is set to the Eastern time zone), and the time values were updated to prevent the appointment from shifting.

Mise à jour du fuseau horaire sur un rendez-vous existant à l’aide d’EWSUpdating the time zone on an existing appointment by using EWS

L’exemple de demande d' opération UPDATEITEM EWS met à jour le fuseau horaire sur un rendez-vous.The following example EWS UpdateItem operation request updates the time zone on an appointment. Cet exemple ne met pas à jour les éléments StartTimeZone et EndTimeZone , de sorte que le serveur déplace les heures de début et de fin du rendez-vous de façon à ce qu’il soit conservé en même temps dans le nouveau fuseau horaire.This example only updates the StartTimeZone and EndTimeZone elements, so the server will shift the start and end times of the appointment to keep it at the same time-zone-relative time in the new time zone. La valeur de l’élément ItemId est raccourcie pour des raisons de lisibilité.The value of the ItemId element is shortened for readability.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types" 
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
  </soap:Header>
  <soap:Body>
    <m:UpdateItem ConflictResolution="AlwaysOverwrite" SendMeetingInvitationsOrCancellations="SendToNone">
      <m:ItemChanges>
        <t:ItemChange>
          <t:ItemId Id="AAMkADA5..." ChangeKey="DwAAABYA..." />
          <t:Updates>
            <t:SetItemField>
              <t:FieldURI FieldURI="calendar:StartTimeZone" />
              <t:CalendarItem>
                <t:StartTimeZone Id="Central Standard Time" />
              </t:CalendarItem>
            </t:SetItemField>
            <t:SetItemField>
              <t:FieldURI FieldURI="calendar:EndTimeZone" />
              <t:CalendarItem>
                <t:EndTimeZone Id="Central Standard Time" />
              </t:CalendarItem>
            </t:SetItemField>
          </t:Updates>
        </t:ItemChange>
      </m:ItemChanges>
    </m:UpdateItem>
  </soap:Body>
</soap:Envelope>

L’exemple de requête suivant met à jour le fuseau horaire du rendez-vous et met à jour les heures de début et de fin en définissant explicitement les éléments de début et de fin .The following example request updates the time zone of the appointment, and also updates the start and end times by explicitly setting the Start and End elements. La valeur de l’élément ItemId est raccourcie pour des raisons de lisibilité.The value of the ItemId element is shortened for readability.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types" 
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
  </soap:Header>
  <soap:Body>
    <m:UpdateItem ConflictResolution="AlwaysOverwrite" SendMeetingInvitationsOrCancellations="SendToNone">
      <m:ItemChanges>
        <t:ItemChange>
          <t:ItemId Id="AAMkADA5..." ChangeKey="DwAAABYA..." />
          <t:Updates>
            <t:SetItemField>
              <t:FieldURI FieldURI="calendar:StartTimeZone" />
              <t:CalendarItem>
                <t:StartTimeZone Id="Central Standard Time" />
              </t:CalendarItem>
            </t:SetItemField>
            <t:SetItemField>
              <t:FieldURI FieldURI="calendar:EndTimeZone" />
              <t:CalendarItem>
                <t:EndTimeZone Id="Central Standard Time" />
              </t:CalendarItem>
            </t:SetItemField>
            <t:SetItemField>
              <t:FieldURI FieldURI="calendar:Start" />
              <t:CalendarItem>
                <t:Start>2014-06-20T17:00:00.000Z</t:Start>
              </t:CalendarItem>
            </t:SetItemField>
            <t:SetItemField>
              <t:FieldURI FieldURI="calendar:End" />
              <t:CalendarItem>
                <t:End>2014-06-20T18:00:00.000Z</t:End>
              </t:CalendarItem>
            </t:SetItemField>
          </t:Updates>
        </t:ItemChange>
      </m:ItemChanges>
    </m:UpdateItem>
  </soap:Body>
</soap:Envelope>

Voir aussiSee also