Если вы обновляете встречи и устанавливаете часовой пояс на всемирное координированное время, а затем просматриваете ту же встречу, где часовой пояс 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 это показывает мне исправленное обновленное Datetime по восточному поясному времени. Если я заменю UTC на Восточное стандартное время в деталях события, тогда он изменит часовой пояс собрания на UTC, поэтому также сместится время (что, я думаю, ваша проблема, если вы используете UTC в мероприятии). Я предлагаю вам взглянуть на встречу с клиентом Outlook Desktop, так как он покажет вам часовой пояс, связанный с встречей, где веб-клиент просто дает вам скорректированное значение.
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);
28.08.2020
Eastern Standard Time
вместоEastern Time
, но результат тот же. На этот раз я также изменил время (чтобы убедиться, что он действительно обновляет время) на 9:00 и 10:00. Он действительно обновился, но все еще отстает на четыре часа (теперь отображается календарь (5:00 и 6:00). Мой календарь - это просто онлайн-календарь Outlook; и если я вручную создаю встречу там, он правильно устанавливает время как восточное стандартное время США. . 28.08.2020List<Option> options = new List<Option> { new HeaderOption("Prefer", "outlook.timezone=\"Eastern Standard Time\"") };
или без него 28.08.2020