Где дата «начала» появления в Ical.Чистое повторяющееся событие?

#c# #ical.net

Вопрос:

Я использую пакет nuget Ical.Net 4.2.0 в моем проекте на C#. Я создал повторяющееся событие календаря, и мне нужно определить начальную дату и время для каждого события. Я запрашиваю календарь с помощью 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 содержит пять событий, но, ища дату «начала», я могу найти только дату начала события. Где я могу найти даты начала каждого повторяющегося события?

Ответ №1:

Вы получаете их в фактическом Occurrence объекте , возвращаемом GetOcurrences (который вы отбрасываете и фактически выбираете источник CalendarEvent , который одинаков для всех вхождений), в Period.StartTime свойстве (которое является IDateTime , которое вы можете преобразовать в объекты .NET datetime).

Чтобы получить все даты начала (как DateTimeOffset объект):

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

Увидеть это в действии

Комментарии:

1. Идеальный ответ. Именно то, что я искал, и я ценю этот пример. Ваше здоровье!