0

o365 イベント レスト API を使用して終日イベントを作成しようとしていますが、エラーの開始時刻と終了時刻が真夜中になるはずです。終日イベントの開始日と終了日の下を使用してみました。例: 開始日: 01/01/2016 12:00 AM (dd/MM/yyyy) 終了日: 2016 年 2 月 1 日午前 12:00 (dd/MM/yyyy) api が言うように、終日のイベントには 24 時間のギャップがあるはずです。

イベントを作成するために別のケースを試しましたが、残りのAPIに渡した日付に違いがあり、タイムゾーンも渡してみましたが、まだ違いがあります。

API 2.0 を使用すると、異なる問題が発生します。互換性のないタイプの種類が見つかりました。タイプ 'Microsoft.OutlookServices.DateTimeTimeZone' は、予想される種類 'Primitive' ではなく種類 'Complex' であることがわかりました。

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;
4

1 に答える 1

0

v2 API を使用するには、NuGet のv2 ライブラリ(実行しているように見えます) と v2 エンドポイント (エラーによりそうではありません) が必要です。v2 ライブラリは v1 エンドポイントと互換性がないため、表示されているエラーが発生しています。

v1 エンドポイントでは、StartEndは単なる ISO 8601 日付/時刻文字列でした。v2 では、複合型です。

v2 では、開始日時と終了日時をタイム ゾーンで指定する必要がありIsAllDay、イベントのプロパティを に設定する必要もありますtrue

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);

v1 でこれを行うには、適切なオフセットを計算し、それらを ISO 8601 文字列に含める必要があります (DST を補正します)。つまり、DST にいるため、太平洋は現在 UTC-7 (標準の -8 ではなく) です。StartTimeZoneプロパティとプロパティも設定する必要がありEndTimeZoneます。だから私は次のようなことをします:

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
};
于 2016-04-15T12:52:45.600 に答える