C# Microsoft Graph事件资源类型:更新开始和结束日期时间问题

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事件。下面的代码正确地更新了日期,但它将
开始
结束
时间延迟四小时。当我转到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\”)};