#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. Идеальный ответ. Именно то, что я искал, и я ценю этот пример. Ваше здоровье!