ICAL Recurrence RULE Generation (RRULE)

1

Мне нужна помощь в понимании генерации правила повторения ICAL.

Я создал календарь с одним событием. Событие имеет правило повторять каждые 2 дня в течение следующих 5 дней.

Календарь Google генерирует ICS файл с этим.

...
BEGIN:VTIMEZONE
TZID:America/New_York
X-LIC-LOCATION:America/New_York
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
...

Это та часть, которая меня смущает.

RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU

РЕДАКТИРОВАТЬ

Полный файл ICS, созданный Google.

BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Public
X-WR-TIMEZONE:America/New_York
X-WR-CALDESC:dsdadsa
BEGIN:VTIMEZONE
TZID:America/New_York
X-LIC-LOCATION:America/New_York
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;VALUE=DATE:20140415
DTEND;VALUE=DATE:20140416
DTSTAMP:20140319T053224Z
UID:[email protected]
RECURRENCE-ID;VALUE=DATE:20140415
CLASS:PUBLIC
CREATED:20140319T053209Z
DESCRIPTION:
LAST-MODIFIED:20140319T053209Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:event details
TRANSP:TRANSPARENT
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20140413
DTEND;VALUE=DATE:20140414
DTSTAMP:20140319T053224Z
UID:[email protected]
RECURRENCE-ID;VALUE=DATE:20140413
CLASS:PUBLIC
CREATED:20140319T053209Z
DESCRIPTION:
LAST-MODIFIED:20140319T053209Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:event details
TRANSP:TRANSPARENT
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20140411
DTEND;VALUE=DATE:20140412
DTSTAMP:20140319T053224Z
UID:[email protected]
RECURRENCE-ID;VALUE=DATE:20140411
CLASS:PUBLIC
CREATED:20140319T053209Z
DESCRIPTION:
LAST-MODIFIED:20140319T053209Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:event details
TRANSP:TRANSPARENT
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20140409
DTEND;VALUE=DATE:20140410
DTSTAMP:20140319T053224Z
UID:[email protected]
RECURRENCE-ID;VALUE=DATE:20140409
CLASS:PUBLIC
CREATED:20140319T053209Z
DESCRIPTION:
LAST-MODIFIED:20140319T053209Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:event details
TRANSP:TRANSPARENT
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20140407
DTEND;VALUE=DATE:20140408
DTSTAMP:20140319T053224Z
UID:[email protected]
RECURRENCE-ID;VALUE=DATE:20140407
CLASS:PUBLIC
CREATED:20140319T053209Z
DESCRIPTION:
LAST-MODIFIED:20140319T053209Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:event details
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR

Вместо этого

RRULE:FREQ=DAILY;COUNT=5;INTERVAL=2

Google создал все 5 событий отдельно. Зачем.??

Начало мероприятия с 7 апреля

Есть ли какой-либо пакет для этого в Java, экономит много времени

Теги:
ical4j
icalendar

1 ответ

1
Лучший ответ

Информация, которую вы BEGIN:VTIMEZONE - это информация о часовом поясе (обратите внимание на BEGIN:VTIMEZONE и END:TIMEZONE) и охватывает начало летнего времени для этого часового пояса. В частности, летнее время начинается со второго воскресенья третьего месяца каждого года.

Попробуйте просмотреть фрагмент кода между BEGIN:VEVENT и END:VEVENT где вы должны увидеть RRULE для своего мероприятия.

Генерация RRULE очень зависит от ваших базовых структур данных. В Google есть проект, который обеспечивает анализ и оценку RRULE.

  • 0
    Спасибо, это хорошее объяснение. :) Я думал, что Google строит вещи по-другому. !! Почему Google строит отдельный VEVENT вместо создания правила типа RRULE:FREQ=DAILY;COUNT=5;INTERVAL=2 ?
  • 0
    Пожалуйста, вы можете показать полный календарь, включая VEVENT , чтобы я мог объяснить?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню