C# Microsoft Graph事件资源类型:更新开始和结束日期时间问题
我正在使用更新outlook事件。下面的代码正确地更新了日期,但它将C# Microsoft Graph事件资源类型:更新开始和结束日期时间问题,c#,microsoft-graph-api,microsoft-graph-sdks,microsoft-graph-calendar,C#,Microsoft Graph Api,Microsoft Graph Sdks,Microsoft Graph Calendar,我正在使用更新outlook事件。下面的代码正确地更新了日期,但它将开始和结束时间延迟四小时。当我转到Outlook日历时,它显示更改的时间,开始时间为04:30,结束时间为05:30,而不是开始时间为08:30,结束时间为09:30问题:为什么备注:我在美国东部时区,但我认为这段代码与此无关,除非我在这里遗漏了什么 代码: authProvider和“{id}”变量的值与问题无关,因为具有真实值的代码可以正常工作,因为它会无错误地更新事件 ..... GraphServiceClient gr
开始
和结束
时间延迟四小时。当我转到Outlook日历时,它显示更改的时间,开始时间为04:30
,结束时间为05:30
,而不是开始时间为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。首选标题eg来设置此选项
List<Option> options = new List<Option> { new HeaderOption("Prefer", "outlook.timezone=\"Eastern Time\"") };
await graphClient.Me.Events["{id}"]
.Request(options)
.UpdateAsync(@event);
List options=new List{new header选项(“首选”,“outlook.timezone=\“东部时间”);
等待graphClient.Me.Events[“{id}”]
.请求(选项)
.UpdateAsync(@event);
附加的
好的,这是我创建的一个快速单元测试,它创建一个约会,然后更新它。在Outlook中,这将以东部标准时间显示更正的更新日期时间。如果我在活动详情中用UTC代替东部标准时间,则会将会议时区更改为UTC,因此也会改变时间(如果您在活动中使用UTC,我认为这是您的问题)。我建议您查看一下Outlook桌面客户端的约会,它会显示与约会相关的时区,其中web客户端只提供调整后的值
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);
List options=new List{new header选项(“首选”,“outlook.timezone=\“东部标准时间”);
DateTimeZone start=new DateTimeZone{DateTime=“2020-08-29T08:30:00.0000000”,TimeZone=“UTC”};
var@event=新事件
{
Subject=“测试对象”,
Body=newitembody{Content=“testbody Content”},
Start=newdatetimezone{DateTime=“2020-08-29T07:30:00.0000000”,TimeZone=“东部标准时间”},
End=newdatetimezone{DateTime=“2020-08-29T08:30:00.0000000”,TimeZone=“东部标准时间”}
};
var newEvent=await GraphServiceClient.Me.Events
.请求(选项)
.AddAsync(@event);
@事件=新事件
{
Subject=“更新的主题”,
Body=newitembody{Content=“testbody Content”},
Start=newdatetimezone{DateTime=“2020-08-29T08:30:00.0000000”,TimeZone=“东部标准时间”},
End=newdatetimezone{DateTime=“2020-08-29T09:30:00.0000000”,TimeZone=“东部标准时间”}
};
等待GraphServiceClient.Me.Events[newEvent.Id]
.请求(选项)
.UpdateAsync(@event);
还是一样的行为。我甚至尝试使用东部标准时间
而不是东部时间
,但结果仍然相同。这一次,我还将时间(以确保它实际上正在更新时间)更改为9:00和10:00。它确实更新了,但仍然落后四个小时(日历现在显示(5:00和6:00)。我的日历只是联机Outlook日历;如果我在那里手动创建约会,它会将时间正确设置为美国东部标准时间。您将时区从“UTC”更改为“东部标准时间”的建议奏效(谢谢)。还注意到它使用或不使用List options=new List{new HeaderOption(“preference”,“outlook.timezone=\“Eastern Standard Time\”)};