我正在尝试使用o365事件休息api创建一整天的事件,但是获取错误的开始和结束时间应该是午夜 我尝试使用以下开始日期&全天活动的结束日期 例如 开始日期:01/01/2016 12:00 AM(日/月/日) 截止日期:02/01/2016 12:00 AM(年/月/日) 正如api所说的那样,整天的活动应该有24小时的间隙,我也会以同样的方式投掷错误。
我尝试了创建事件的不同情况,但是我传递给rest api的日期之间存在差异,我也试过了时间区域,但仍然存在差异。
使用API 2.0获得不同的问题。 发现了不兼容的类型。发现“Microsoft.OutlookServices.DateTimeTimeZone”类型是“复杂”类型而不是预期类型“原始”。
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;
答案 0 :(得分:0)
为了使用v2 API,您需要来自NuGet的v2 library(它看起来像你正在做的)和v2端点(由于错误你不是)。 v2库与v1端点不兼容,导致您看到的错误。
在v1端点中,Start
和End
只是简单的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
};