Microsoft Graph 事件资源类型:更新开始和结束日期时间问题
Microsoft Graph Event Resource type: Updating Start and End datetime issue
我正在使用 Microsoft Graph .NET SDK 更新 outlook 事件。以下代码正确更新了日期,但它更新了 Start
和 End
时间,晚了四个小时。当我转到我的 Outlook 日历时,它显示更改时间为 04:30
开始和 05:30
结束 instead of
显示 08:30
开始和 09:30
结束. 问题:为什么? 备注:我在美国东部时区,但我不认为这段代码与它有任何关系,除非我在这里遗漏了什么。
代码:
authProvider
和 "{id}"
变量的值与问题无关,因为具有实际值的代码可以正常工作,因为它确实会无错误地更新事件。
.....
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var @event = new Event
{
Subject = "Test subject",
Body= new ItemBody { Content = "Test body content"}
Start = new DateTimeTimeZone { DateTime = "2020-08-29T08:30:00.0000000", TimeZone = "UTC" }
End = new DateTimeTimeZone { DateTime = "2020-08-29T09:30:00.0000000", TimeZone = "UTC" }
};
await graphClient.Me.Events["{id}"]
.Request()
.UpdateAsync(@event);
如果您更新约会并将时区设置为 UTC,然后查看 Outlook 时区为东部的同一约会,那么该行为听起来是正确的。作为一般规则,您应该检查约会的时区(或您修改的邮箱),然后在您的更新中匹配它(特别是如果您处理多个时区)。可以影响时区的另一件事是 Outlook.Prefer Header https://docs.microsoft.com/en-us/graph/api/user-list-events?view=graph-rest-1.0&tabs=http 例如设置这个
List<Option> options = new List<Option> { new HeaderOption("Prefer", "outlook.timezone=\"Eastern Time\"") };
await graphClient.Me.Events["{id}"]
.Request(options)
.UpdateAsync(@event);
额外
好的,这是我创建的一个快速单元测试,它创建一个约会然后更新它。在 Outlook 中,这显示了东部标准时间更正后的更新日期时间。如果我在活动详细信息中用 UTC 代替东部标准时间,那么它会将会议时区更改为 UTC,因此也会改变时间(如果您在活动中使用 UTC,我认为这是您的问题)。我建议您使用 Outlook 桌面客户端查看约会,它会向您显示与约会关联的时区,网络客户端只为您提供调整后的值。
List<Option> options = new List<Option> { new HeaderOption("Prefer", "outlook.timezone=\"Eastern Standard Time\"") };
DateTimeTimeZone start = new DateTimeTimeZone { DateTime = "2020-08-29T08:30:00.0000000", TimeZone = "UTC" };
var @event = new Event
{
Subject = "Test subject",
Body = new ItemBody { Content = "Test body content" },
Start = new DateTimeTimeZone { DateTime = "2020-08-29T07:30:00.0000000", TimeZone = "Eastern Standard Time" },
End = new DateTimeTimeZone { DateTime = "2020-08-29T08:30:00.0000000", TimeZone = "Eastern Standard Time" }
};
var newEvent = await GraphServiceClient.Me.Events
.Request(options)
.AddAsync(@event);
@event = new Event
{
Subject = "Updated subject",
Body = new ItemBody { Content = "Test body content" },
Start = new DateTimeTimeZone { DateTime = "2020-08-29T08:30:00.0000000", TimeZone = "Eastern Standard Time" },
End = new DateTimeTimeZone { DateTime = "2020-08-29T09:30:00.0000000", TimeZone = "Eastern Standard Time" }
};
await GraphServiceClient.Me.Events[newEvent.Id]
.Request(options)
.UpdateAsync(@event);
我正在使用 Microsoft Graph .NET SDK 更新 outlook 事件。以下代码正确更新了日期,但它更新了 Start
和 End
时间,晚了四个小时。当我转到我的 Outlook 日历时,它显示更改时间为 04:30
开始和 05:30
结束 instead of
显示 08:30
开始和 09:30
结束. 问题:为什么? 备注:我在美国东部时区,但我不认为这段代码与它有任何关系,除非我在这里遗漏了什么。
代码:
authProvider
和 "{id}"
变量的值与问题无关,因为具有实际值的代码可以正常工作,因为它确实会无错误地更新事件。
.....
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var @event = new Event
{
Subject = "Test subject",
Body= new ItemBody { Content = "Test body content"}
Start = new DateTimeTimeZone { DateTime = "2020-08-29T08:30:00.0000000", TimeZone = "UTC" }
End = new DateTimeTimeZone { DateTime = "2020-08-29T09:30:00.0000000", TimeZone = "UTC" }
};
await graphClient.Me.Events["{id}"]
.Request()
.UpdateAsync(@event);
如果您更新约会并将时区设置为 UTC,然后查看 Outlook 时区为东部的同一约会,那么该行为听起来是正确的。作为一般规则,您应该检查约会的时区(或您修改的邮箱),然后在您的更新中匹配它(特别是如果您处理多个时区)。可以影响时区的另一件事是 Outlook.Prefer Header https://docs.microsoft.com/en-us/graph/api/user-list-events?view=graph-rest-1.0&tabs=http 例如设置这个
List<Option> options = new List<Option> { new HeaderOption("Prefer", "outlook.timezone=\"Eastern Time\"") };
await graphClient.Me.Events["{id}"]
.Request(options)
.UpdateAsync(@event);
额外
好的,这是我创建的一个快速单元测试,它创建一个约会然后更新它。在 Outlook 中,这显示了东部标准时间更正后的更新日期时间。如果我在活动详细信息中用 UTC 代替东部标准时间,那么它会将会议时区更改为 UTC,因此也会改变时间(如果您在活动中使用 UTC,我认为这是您的问题)。我建议您使用 Outlook 桌面客户端查看约会,它会向您显示与约会关联的时区,网络客户端只为您提供调整后的值。
List<Option> options = new List<Option> { new HeaderOption("Prefer", "outlook.timezone=\"Eastern Standard Time\"") };
DateTimeTimeZone start = new DateTimeTimeZone { DateTime = "2020-08-29T08:30:00.0000000", TimeZone = "UTC" };
var @event = new Event
{
Subject = "Test subject",
Body = new ItemBody { Content = "Test body content" },
Start = new DateTimeTimeZone { DateTime = "2020-08-29T07:30:00.0000000", TimeZone = "Eastern Standard Time" },
End = new DateTimeTimeZone { DateTime = "2020-08-29T08:30:00.0000000", TimeZone = "Eastern Standard Time" }
};
var newEvent = await GraphServiceClient.Me.Events
.Request(options)
.AddAsync(@event);
@event = new Event
{
Subject = "Updated subject",
Body = new ItemBody { Content = "Test body content" },
Start = new DateTimeTimeZone { DateTime = "2020-08-29T08:30:00.0000000", TimeZone = "Eastern Standard Time" },
End = new DateTimeTimeZone { DateTime = "2020-08-29T09:30:00.0000000", TimeZone = "Eastern Standard Time" }
};
await GraphServiceClient.Me.Events[newEvent.Id]
.Request(options)
.UpdateAsync(@event);