1

我在我的 C# 项目中使用 nuget 包 Ical.Net 4.2.0。我创建了一个循环日历事件,需要确定每次发生的开始日期时间。我使用 GetOccurrences() 查询日历,如下所示:

var now = DateTime.Parse("2021-09-16T10:00:00");
var later = now.AddHours(1);

//Repeat daily for 5 days
var rrule = new RecurrencePattern(FrequencyType.Daily, 1) { Count = 5 };

var e = new CalendarEvent
{
    Start = new CalDateTime(now),
    End = new CalDateTime(later),
    RecurrenceRules = new List<RecurrencePattern> { rrule },
};

var calendar = new Calendar();
calendar.Events.Add(e);

var startSearch = new CalDateTime(DateTime.Parse("2021-09-16T00:00:00"));
var endSearch = new CalDateTime(DateTime.Parse("2021-09-21T23:59:59"));
var occurrences = calendar.GetOccurrences(startSearch, endSearch)
    .Select(o => o.Source)
    .Cast<CalendarEvent>()
    .ToList();

occurrences包含五个事件,但是寻找“开始”日期,我只能找到事件开始日期。在哪里可以找到每次重复事件发生的开始日期?

4

1 回答 1

1

您可以在属性(这是一个,您可以将其转换为.NET datetime 对象)中Occurrence返回的实际对象GetOcurrences(您正在丢弃并实际选择 source CalendarEvent,这对于所有事件都是相同的)返回的实际对象Period.StartTimeIDateTime

获取所有开始日期时间(作为DateTimeOffset对象):

var startTimes = calendar.GetOccurrences(startSearch, endSearch)
                             .Select(x => x.Period.StartTime.AsDateTimeOffset);

看到它在行动

于 2021-09-16T15:17:46.247 回答