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

问题描述

我正在使用Microsoft Graph .NET SDK更新Outlook事件。以下代码正确地更新了日期,但是将StartEnd时间更新了四个小时。当我转到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);

解决方法

如果您更新约会并将TimeZone设置为UTC,然后查看与Eastern的Outlook时区相同的约会,则该行为听起来是正确的。通常,您应该检查约会的时区(或您正在修改的邮箱),然后在更新中进行匹配(尤其是在处理多个时区时)。可能会影响时区的另一件事是Outlook.Prefer标头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 Desktop客户端的约会,它还会向您显示与约会关联的TimeZone,其中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",Start = new DateTimeTimeZone { DateTime = "2020-08-29T08:30:00.0000000",End = new DateTimeTimeZone { DateTime = "2020-08-29T09:30:00.0000000",TimeZone = "Eastern Standard Time" }
        };
        await GraphServiceClient.Me.Events[newEvent.Id]
       .Request(options)
       .UpdateAsync(@event);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...