使用 ASP 的 Exchange Online 上的事件时区问题。使用 Rest 的 Net MVC 应用程序 api
Event Time zone issue on Exchange Online using ASP. Net MVC application using Rest api
我正在尝试使用 o365 事件休息为全天创建事件 api 但是出现错误开始和结束时间应该是午夜
我尝试使用下面的开始日期和结束日期进行全天活动
例如
开始日期:01/01/2016 12:00 上午 (dd/MM/yyyy)
结束日期:02/01/2016 12:00 上午 (dd/MM/yyyy)
正如 api 所说,全天活动应该有 24 小时的间隔,我仍然以同样的方式进行抛出错误。
我尝试了不同的情况来创建事件,但传递给休息的日期之间存在差异api,我也尝试过传递时区,但仍然存在差异。
使用 API 2.0 遇到不同的问题。
发现了不兼容的类型种类。发现类型 'Microsoft.OutlookServices.DateTimeTimeZone' 属于类型 'Complex',而不是预期的类型 'Primitive'。
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;
为了使用 v2 API,您需要来自 NuGet 的 v2 library(看起来您正在这样做)和 v2 端点(由于错误,您不是) . v2 库与 v1 端点不兼容,这导致了您看到的错误。
在 v1 端点中,Start
和 End
只是简单的 ISO 8601 date/time 字符串。在 v2 中,它们是复杂类型。
在 v2 中你需要用时区指定开始和结束 date/times,你还需要将事件上的 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,因此 Pacific 目前是 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
};
我正在尝试使用 o365 事件休息为全天创建事件 api 但是出现错误开始和结束时间应该是午夜 我尝试使用下面的开始日期和结束日期进行全天活动 例如 开始日期:01/01/2016 12:00 上午 (dd/MM/yyyy) 结束日期:02/01/2016 12:00 上午 (dd/MM/yyyy) 正如 api 所说,全天活动应该有 24 小时的间隔,我仍然以同样的方式进行抛出错误。
我尝试了不同的情况来创建事件,但传递给休息的日期之间存在差异api,我也尝试过传递时区,但仍然存在差异。
使用 API 2.0 遇到不同的问题。 发现了不兼容的类型种类。发现类型 'Microsoft.OutlookServices.DateTimeTimeZone' 属于类型 'Complex',而不是预期的类型 'Primitive'。
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;
为了使用 v2 API,您需要来自 NuGet 的 v2 library(看起来您正在这样做)和 v2 端点(由于错误,您不是) . v2 库与 v1 端点不兼容,这导致了您看到的错误。
在 v1 端点中,Start
和 End
只是简单的 ISO 8601 date/time 字符串。在 v2 中,它们是复杂类型。
在 v2 中你需要用时区指定开始和结束 date/times,你还需要将事件上的 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,因此 Pacific 目前是 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
};