0

Ich versuche, Ereignis für den ganzen Tag mit o365 Event Rest API erstellen, aber Fehler Start-und Endzeit sollte Mitternacht sein Ich habe versucht unter Startdatum verwenden & Enddatum für den ganzen Tag Ereignis z. Startdatum: 01/01/2016 12:00 AM (TT/MM/JJJJ) Enddatum: 02/01/2016 12:00 AM (TT/MM/JJJJ) Wie api sagt, sollte es 24 Stunden Lücke geben Für den ganzen Tag habe ich auf die gleiche Weise noch seinen Wurffehler gemacht.Ereignis Zeitzonenproblem bei Exchange Online mit ASP. Net MVC-Anwendung mit Rest api

Ich versuchte verschiedene Fälle für die Schaffung von Ereignis, aber es gibt einen Unterschied zwischen den Daten, die ich an den Rest api übergeben habe, habe ich versucht mit der Zeitzone zu, aber immer noch gibt es einen Unterschied.

mit API 2.0 bekommen verschiedene Problem. Inkompatible Typen wurden gefunden. Der Typ 'Microsoft.OutlookServices.DateTimeTimeZone' wurde von der Art 'Complex' anstelle der erwarteten Art 'Primitive' gefunden.

var startDt=new DateTime(2016, 1, 22, 00, 00, 0); 
startDate.DateTime = startDt.ToString(dateTimeFormat); 
startDate.TimeZone = timeZone; 

DateTimeTimeZone endDate = new DateTimeTimeZone(); 
endDate.DateTime = startDt.AddDays(1).ToString(dateTimeFormat); 
endDate.TimeZone = timeZone; 

Event newEvent = new Event 
{ 
Subject = "Test Event", 
Location = location, 
Start = startDate, 
End = endDate, 
Body = body 
}; 

      try 
      { 
       // Make sure we have a reference to the Outlook Services client 
       var outlookServicesClient = await AuthenticationHelper.EnsureOutlookServicesClientCreatedAsync("Calendar"); 

       // This results in a call to the service. 
       await outlookServicesClient.Me.Events.AddEventAsync(newEvent); 
       await ((IEventFetcher)newEvent).ExecuteAsync(); 
       newEventId = newEvent.Id; 
      } 
      catch (Exception e) 
      { 
       throw new Exception("We could not create your calendar event: " + e.Message); 
      } 
      return newEventId; 

Antwort

0

Um die v2-API zu verwenden, müssen Sie die v2 library von NuGet (die Sie nicht durch den Fehler) und der v2 Endpunkt (die es, wie du tust aussieht). Die v2-Bibliothek ist nicht mit dem v1-Endpunkt kompatibel, der den angezeigten Fehler verursacht.

Im Endpunkt v1 waren Start und End nur einfache ISO 8601 Datum/Uhrzeit-Zeichenfolgen. In v2 sind sie komplexe Typen.

In v2 müssen Sie das Start- und Enddatum/-zeit mit Zeitzonen angeben, und Sie müssen auch die IsAllDay-Eigenschaft für das Ereignis auf true festlegen.

OutlookServicesClient client = new OutlookServicesClient(
    new Uri("https://outlook.office.com/api/v2.0"), GetToken); 

Event newEvent = new Event() 
{ 
    Start = new DateTimeTimeZone() 
    { 
    DateTime = "2016-04-16T00:00:00", 
    TimeZone = "Pacific Standard Time" 
    }, 
    End = new DateTimeTimeZone() 
    { 
    DateTime = "2016-04-17T00:00:00", 
    TimeZone = "Pacific Standard Time" 
    }, 
    Subject = "All Day", 
    IsAllDay = true 
}; 

await client.Me.Events.AddEventAsync(newEvent); 

es in v1 zu tun, müssen Sie die entsprechenden Offsets und sie in der ISO 8601-String (Kompensation DST) berechnen. Da wir also in der Sommerzeit sind, ist Pacific derzeit UTC-7 (statt -8 im Standard). Sie müssen auch die Eigenschaften StartTimeZone und EndTimeZone festlegen. Also würde ich etwas wie:

Event newEvent = new Event() 
{ 
    Start = "2016-04-16T00:00:00-07:00", 
    End = "2016-04-17T00:00:00-07:00", 
    StartTimeZone = "Pacific Standard Time", 
    EndTimeZone = "Pacific Standard Time", 
    Subject = "All Day", 
    IsAllDay = true 
}; 
+0

Ja danke Jason für die Lösung, Gibt es trotzdem, dass ich mit v1 erstellen kann? Ich möchte nicht auf V2 upgraden, da Codeänderungen im vorhandenen Code codiert werden müssen. Mit V1 erhalte ich unter Fehler Ihre Anfrage kann nicht abgeschlossen werden. Die Start- und Endzeiten für ein ganztägiges Ereignis müssen auf Mitternacht festgelegt werden. Ich habe versucht, indem ich IsAllDay = true –

+0

Es ist ein bisschen schwieriger, aber machbar. Sie müssen die Eigenschaften 'StartTimeZone' und 'EndTimeZone' für das Ereignis festlegen, und Sie müssen 'Start' und 'Ende' mit entsprechenden Offsets angeben (Ausgleich für die Sommerzeit). Siehe aktualisierte Antwort. –

+0

Danke Jason, ich habe StartTimeZone und EndTimeZone übergeben, weiß aber nicht, wie ich die Offsets entsprechend verwalten kann, könntest du es mir bitte mitteilen? Wie kann ich Start und Ende mit entsprechenden Offsets angeben? –