Мне нужна помощь в понимании генерации правила повторения 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, экономит много времени
Информация, которую вы BEGIN:VTIMEZONE
- это информация о часовом поясе (обратите внимание на BEGIN:VTIMEZONE
и END:TIMEZONE
) и охватывает начало летнего времени для этого часового пояса. В частности, летнее время начинается со второго воскресенья третьего месяца каждого года.
Попробуйте просмотреть фрагмент кода между BEGIN:VEVENT
и END:VEVENT
где вы должны увидеть RRULE
для своего мероприятия.
Генерация RRULE
очень зависит от ваших базовых структур данных. В Google есть проект, который обеспечивает анализ и оценку RRULE
.
RRULE:FREQ=DAILY;COUNT=5;INTERVAL=2
?VEVENT
, чтобы я мог объяснить?