首页 > 解决方案 > 使用 microsoft graph api 创建全天事件时,总是缺少最后一天

问题描述

我正在使用以下代码创建一个 microsoft graph 事件对象:

Event @event = new Event
{
  Subject = subject,
  Body = new ItemBody
  {
    ContentType = BodyType.Html,
    Content = $"<div id=\"BookingId\">{ id }</div><div id=\"CheckSum\">{ checkSum }</div>"
  },
  Start = new DateTimeTimeZone
  {
    DateTime = begin.ToString("yyyy-MM-ddTHH:mm:ss", new CultureInfo("de-AT")),
    TimeZone = TimeZoneInfo.Local.Id
    },
    End = new DateTimeTimeZone
    {
        DateTime = end.ToString("yyyy-MM-ddTHH:mm:ss", new CultureInfo("de-AT")),
        TimeZone = TimeZoneInfo.Local.Id
    },
    Location = new Location
    {
        DisplayName = location
    },
    Attendees = new List<Attendee>(),
    IsAllDay = true
};

当此代码在我的机器上运行时,TimeZone 设置为“W. Europe Standard Time”。事件将像这样添加:

await graphClient.Groups[group.Id].Events
   .Request()
   .AddAsync(@event);

到目前为止,这很有效,但是我所有的事件都比我最初为结束时间设置的时间少了一天。还试图增加几个小时,但后来我得到一个例外,说 allDayEvents 必须在午夜开始和结束。但是将它们设置为午夜会删除事件的最后一天。

最简单的解决方法似乎总是在结束日期上增加一天。但是,如果这只是一个夏令时问题,然后我会在冬天得到一天的时间呢?我没有发现将夏令时添加到开始和结束日期的任何可能性。

附加信息:我在上面的代码中使用的日期时间对象已经将“00:00:00”作为时间。这也可以从上面的文字中看出,因为使用不同的时间会出现异常。因此,链接问题的答案并没有解决我的问题。所以,没有必要否决我的问题。

标签: c#.netmicrosoft-graph-api

解决方案


创建“全天”事件时,开始和结束时间应该只指定日期,而不是日期和时间(或更准确地说,时间应该是00:00:00):

Start = new DateTimeTimeZone
{
    DateTime = begin..ToString("yyyy-MM-ddT00:00:00"),
    TimeZone = TimeZoneInfo.Local.Id
},
End = new DateTimeTimeZone
{
    DateTime = end.ToString("yyyy-MM-ddT00:00:00"),
    TimeZone = TimeZoneInfo.Local.Id
},

非常类似于这个问题:创建全天事件失败


推荐阅读