Freigeben über


Erstellen von Terminen in einer bestimmten Zeitzone mithilfe von EWS in Exchange

Wenn ein Termin oder eine Besprechung in einem Exchange-Kalender erstellt wird, wird die Zeitzone, die zum Angeben der Start- und Endzeiten verwendet wird, als Erstellungszeitzone für den Termin gespeichert. Diese Zeitzone wird auch verwendet, um Datums- und Uhrzeitwerte zu interpretieren, für die keine explizite Zeitzone angegeben ist. Daher ist es wichtig, die Optionen zum Angeben der Zeitzone zu verstehen.

Erstellen von Terminen in verschiedenen Zeitzonen mithilfe der verwalteten EWS-API

Beim Erstellen von Terminen oder Besprechungen mit der verwalteten EWS-API haben Sie drei Optionen zum Angeben der Zeitzone:

  • Wenn Sie die Zeitzone des Computers verwenden möchten, auf dem Die verwaltete EWS-API ausgeführt wird, geben Sie beim Erstellen des ExchangeService-Objekts keine Zeitzone an.

  • Um eine bestimmte Zeitzone für alle Datums-/Uhrzeiteigenschaften zu verwenden, einschließlich der Eigenschaften beim Erstellen eines neuen Termins oder einer Besprechung, geben Sie eine Zeitzone im Konstruktor für das ExchangeService-Objekt an.

  • Um eine andere Zeitzone als die in der ExchangeService.TimeZone-Eigenschaft angegebene zu verwenden, verwenden Sie die Eigenschaften Appointment.StartTimeZone und Appointment.EndTimeZone .

Hinweis

Die EndTimeZone-Eigenschaft ist nur verfügbar, wenn die ExchangeService.RequestedServerVersion-Eigenschaft auf Exchange2010 oder höher festgelegt ist. Wenn sie nicht verfügbar ist, gilt das Festlegen von StartTimeZone sowohl für die Start- als auch die Endzeit des Termins.

Im folgenden Beispiel wird die verwaltete EWS-API verwendet, um drei Termine zu erstellen. Jeder Termin beginnt ab zwei Tagen um 13:00 Uhr in einer nicht angegebenen Zeitzone und endet eine Stunde später. Der erste Termin wird in der Zeitzone des Clientcomputers mithilfe des standardmäßigen EWS Managed API-Verhaltens erstellt. Die zweite wird in der central-Zeitzone mit den Eigenschaften Appointment.StartTimeZone und Appointment.EndTimeZone erstellt. In diesem Fall legen wir auch die erweiterte TimeZoneDescription-Eigenschaft auf denselben Wert wie die verwendete TimeZone fest. Die dritte wird in der Mountain-Zeitzone mithilfe der ExchangeService.TimeZone-Eigenschaft erstellt.

using Microsoft.Exchange.WebServices.Data;
using System.Security;
static void CreateAppointments(string userEmail, SecureString userPass)
{
    // *****************************************************
    // Create an appointment using the client computer's time zone.
    // *****************************************************
    // Do not specify a time zone when creating the ExchangeService.
    ExchangeService clientTZService = new ExchangeService(ExchangeVersion.Exchange2010);
    clientTZService.Credentials = new NetworkCredential(userEmail, userPass);
    clientTZService.AutodiscoverUrl(userEmail, redirectionCallback);
    // Create the appointment.
    Appointment clientTZAppt = new Appointment(clientTZService);
    clientTZAppt.Subject = "Appointment created using client time zone";
    clientTZAppt.Body = new MessageBody(string.Format("Time zone: {0}", clientTZService.TimeZone.DisplayName));
    // Set the start time to 1:00 PM two days from today.
    DateTime startTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day + 2);
    startTime = startTime.AddHours(13);
    clientTZAppt.Start = startTime;
    // Set the end time to 2:00 PM on that same day.
    DateTime endTime = startTime.AddHours(1);
    clientTZAppt.End = endTime;
    // Save the appointment to the default calendar.
    try
    {
        // This method results in a call to EWS.
        clientTZAppt.Save(SendInvitationsMode.SendToNone);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error saving appointment: {0}", ex.Message);
    }
    // *****************************************************
    // Create an appointment in the Central time zone by
    // using the StartTimeZone property.
    // *****************************************************
    // Extended Property for the TimeZone Description
    ExtendedPropertyDefinition tzDescription = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Appointment, 33332, MapiPropertyType.String);
    // Retrieve the Central time zone.
    TimeZoneInfo centralTZ = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
    // Create the appointment.
    Appointment centralTZAppt = new Appointment(clientTZService);
    centralTZAppt.Subject = "Appointment created using Central time zone";
    centralTZAppt.Body = new MessageBody(string.Format("Time zone: {0}", centralTZ.DisplayName));
    // Set the time zone on the appointment.
    centralTZAppt.StartTimeZone = centralTZ;
    centralTZAppt.EndTimeZone = centralTZ;
    // Set the start time to 1:00 PM two days from today.
    centralTZAppt.Start = startTime;
    // Set the end time to 2:00 PM on that same day.
    centralTZAppt.End = endTime;
    // Set the TimeZone Description on the appointment/meeting
    centralTZAppt.SetExtendedProperty(tzDescription, centralTZ.DisplayName);
    // Save the appointment to the default calendar.
    try
    {
        // This method results in a call to EWS.
        centralTZAppt.Save(SendInvitationsMode.SendToNone);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error saving appointment: {0}", ex.Message);
    }
    // *****************************************************
    // Create an appointment in the Mountain time zone by
    // using the ExchangeService.TimeZone property.
    // *****************************************************
    // Specify the Mountain time zone when creating the ExchangeService.
    TimeZoneInfo mountainTZ = TimeZoneInfo.FindSystemTimeZoneById("Mountain Standard Time");
    ExchangeService mountainTZService = new ExchangeService(ExchangeVersion.Exchange2010, mountainTZ);
    mountainTZService.Credentials = new NetworkCredential(userEmail, userPass);
    mountainTZService.AutodiscoverUrl(userEmail, redirectionCallback);
    // Create the appointment.
    Appointment mountainTZAppt = new Appointment(mountainTZService);
    mountainTZAppt.Subject = "Appointment created using Mountain time zone";
    mountainTZAppt.Body = new MessageBody(string.Format("Time zone: {0}", mountainTZService.TimeZone.DisplayName));
    // Set the start time to 1:00 PM two days from today.
    mountainTZAppt.Start = startTime;
    // Set the end time to 2:00 PM on that same day.
    mountainTZAppt.End = endTime;
    // Save the appointment to the default calendar.
    try
    {
        // This method results in a call to EWS.
        mountainTZAppt.Save(SendInvitationsMode.SendToNone);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error saving appointment: {0}", ex.Message);
    }
}

Hinweis

Im zweiten Beispiel muss die erweiterte TimeZoneDescription-Eigenschaft festgelegt werden, um ein Potenzierungsproblem zu vermeiden, wenn Besprechungsupdates an den enteralen Empfänger gesendet werden.

Wenn dieses Beispiel auf einem Clientcomputer ausgeführt wird, der in der Zeitzone "Eastern" konfiguriert ist und die drei termine, die erstellt werden, von einem Client aus angezeigt werden, der in der Östlichen Zeitzone konfiguriert ist, werden sie um 13:00 Uhr, 14:00 Uhr bzw. 15:00 Uhr angezeigt.

Erstellen von Terminen in verschiedenen Zeitzonen mithilfe von EWS

Beim Erstellen von Terminen oder Besprechungen mit EWS haben Sie drei Optionen zum Angeben der Zeitzone:

Im folgenden Beispiel für eine CreateItem-Vorgangsanforderung wird ein Termin mit UTC erstellt. Beachten Sie, dass das TimeZoneContext-Element , das StartTimeZone-Element und das EndTimeZone-Element fehlen. Die Werte des Start - und End-Elements werden in UTC ausgedrückt.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
  </soap:Header>
  <soap:Body>
    <m:CreateItem SendMeetingInvitations="SendToNone">
      <m:Items>
        <t:CalendarItem>
          <t:Subject>Appointment created using UTC</t:Subject>
          <t:Body BodyType="HTML">Time zone: UTC</t:Body>
          <t:Start>2023-02-07T17:00:00.000Z</t:Start>
          <t:End>2023-02-07T18:00:00.000Z</t:End>
        </t:CalendarItem>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

Im folgenden Beispiel einer CreateItem-Vorgangsanforderung werden die Elemente StartTimeZone und EndTimeZone verwendet, um die zentrale Zeitzone für den Termin anzugeben. Beachten Sie, dass das TimeZoneContext-Element nicht vorhanden ist. Wenn sie jedoch vorhanden wäre, würden die Werte der Elemente StartTimeZone und EndTimeZone ihren Wert überschreiben. Auch hier werden die Werte des Start - und End-Elements in UTC ausgedrückt. Wir legen auch die erweiterte TimeZoneDescription-Eigenschaft auf den gleichen Wert wie timeZone fest, der verwendet wird.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
  </soap:Header>
  <soap:Body>
    <m:CreateItem SendMeetingInvitations="SendToNone">
      <m:Items>
        <t:CalendarItem>
          <t:Subject>Appointment created using Central time zone</t:Subject>
          <t:Body BodyType="HTML">Time zone: (UTC-06:00) Central Time (US &amp;amp; Canada)</t:Body>
          <t:ExtendedProperty>
             <t:ExtendedFieldURI DistinguishedPropertySetId="Appointment" PropertyId="33332" PropertyType="String" />
             <t:Value>(UTC-06:00) Central Time (US &amp; Canada)</t:Value>
          </t:ExtendedProperty>
          <t:Start>2023-02-07T18:00:00.000</t:Start>
          <t:End>2023-02-07T19:00:00.000</t:End>
          <t:StartTimeZone Id="Central Standard Time" />
          <t:EndTimeZone Id="Central Standard Time" />
        </t:CalendarItem>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

Im folgenden Beispiel für die CreateItem-Vorgangsanforderung wird das TimeZoneContext-Element auf die Mountain-Zeitzone festgelegt. Beachten Sie, dass die Elemente StartTimeZone und EndTimeZone fehlen. Again, the Start and End element values are expressed in UTC.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Mountain Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:CreateItem SendMeetingInvitations="SendToNone">
      <m:Items>
        <t:CalendarItem>
          <t:Subject>Appointment created using Mountain time zone</t:Subject>
          <t:Body BodyType="HTML">Time zone: (UTC-07:00) Mountain Time (US &amp;amp; Canada)</t:Body>
          <t:Start>2023-02-07T19:00:00.000</t:Start>
          <t:End>2023-02-07T20:00:00.000</t:End>
        </t:CalendarItem>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

Wenn die drei Termine, die von den vorherigen EWS-Beispielanforderungen erstellt wurden, von einem Client angezeigt werden, der in der Zeitzone "Eastern" konfiguriert ist, werden sie jeweils um 13:00 Uhr, 14:00 Uhr und 15:00 Uhr angezeigt.

Da Sie nun wissen, wie Termine in bestimmten Zeitzonen erstellt werden, können Sie die Zeitzonen für vorhandene Termine auf eine andere aktualisieren.

Siehe auch