ICAL. NET Повторяющиеся элементы: каждый вторник (еженедельно), каждый 2-й, последний понедельник (ежемесячно) с даты начала до даты окончания - PullRequest
0 голосов
/ 13 апреля 2020

Приложение ical (.ics) работает для всех случаев, кроме повторяющихся еженедельных и раз в месяц. Я пытаюсь создать еженедельное повторение для одного из дней недели, а также ежемесячное повторение для последнего вторника / второго вторника каждого месяца. Когда я открываю файл .ics, он говорит: «Операция не удалась».

Еженедельно:

evnt.Start = new CalDateTime(start);
evnt.End = new CalDateTime(new DateTime(evnt.Start.Year, evnt.Start.Month, evnt.Start.Day, end.Hour, end.Minute, end.Second));
rrule = new RecurrencePattern(FrequencyType.Weekly, 1);
rrule.ByDay.Add(new WeekDay(DayOfWeek.Monday));
rrule.Until = end;
evnt.RecurrenceRules = new List<RecurrencePattern> { rrule };

Ежемесячно:

evnt.Start = new CalDateTime(start);
evnt.End = new CalDateTime(new DateTime(evnt.Start.Year, evnt.Start.Month, evnt.Start.Day, end.Hour, end.Minute, end.Second));
rrule = new RecurrencePattern(FrequencyType.Monthly,1);
rrule.Until = end;
rrule.ByDay.Add(new WeekDay(DayOfWeek.Sunday,FrequencyOccurrence.FifthToLast));
evnt.RecurrenceRules = new List<RecurrencePattern> { rrule };

Пожалуйста, дайте мне знать, что я я делаю неправильно.

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Не могли бы вы предоставить данные iCalendar, которые будет выводить ваш код? И, возможно, покажите нам, что такое start и end.

Я пытаюсь создать еженедельное повторение для одного из дней недели

Для этого Данные iCalendar должны выглядеть следующим образом:

FREQ=WEEKLY;BYDAY=MO;INTERVAL=1;UNTIL=20200515T220000Z

Я выбрал понедельник в качестве дня и назначил дату окончания на месяц вперед, как и вы, предоставив какой-то конец.


Я пытаюсь создать ежемесячное повторение для последнего вторника / второго вторника каждого месяца.

Как указывало @ anmari , у вас есть воскресенье в вашем коде, но Вы хотите повторяющийся вторник.

Для этого iCalendar должен выглядеть следующим образом:

FREQ=MONTHLY;BYDAY=2TU,-1TU;INTERVAL=1;UNTIL=20200515T220000Z

или даже так (с BYSETPOS):

FREQ=MONTHLY;BYSETPOS=2,-1;BYDAY=TU;INTERVAL=1;UNTIL=20200515T220000Z
0 голосов
/ 16 апреля 2020

С репликами, которые я получил от @matis и @anmari, я понял причину root.

Когда вы создаете повторяющуюся встречу с указанным c днем ​​недели, даты начала и окончания должны совпадать с одним и тем же днем ​​недели. Вот рабочий образец, происходящий во 2-ю среду каждого месяца.

BEGIN:VCALENDAR
METHOD:PUBLISH
PRODID:-//github.com/rianjs/ical.net//NONSGML ical.net 4.0//EN
VERSION:2.0
BEGIN:VEVENT
ATTENDEE;CN="Last, First":mailto:first.last@email.com
CREATED:20200415T164742
DESCRIPTION: Cal Description
DTEND;TZID=Eastern Standard Time:20200513T110000
DTSTAMP:20200415T204742Z
DTSTART;TZID=Eastern Standard Time:20200513T103000
LOCATION:Meeting location
ORGANIZER;CN="user, Admin";SENT-BY="mailto:admin.user@email.com":
RRULE:FREQ=MONTHLY;COUNT=13;BYDAY=2WE
SEQUENCE:0
SUMMARY:Title
UID:1913d514-696e-4237-bc3c-c1d073eacced
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:Reminder
TRIGGER:-PT15M
END:VALARM
END:VEVENT
END:VCALENDAR
...