API календаря Google — Повторяющиеся события не работают

#google-calendar-api #google-data-api #icalendar

#google-calendar-api #google-data-api #icalendar

Вопрос:

Итак, я пытаюсь создать повторяющееся событие календаря с помощью Google data api, и у меня возникают большие проблемы. Когда я перейду к добавлению события, он добавит только один экземпляр (первый день) события. Что еще более странно, когда я захожу, чтобы удалить его, он спрашивает меня, хочу ли я удалить все события в этом повторении (даже если ни одно после него не существует!).

Вот iCal повторяющееся событие, которое я использую:

 DTSTART;TZID=America/New_York:20110905T122000
DTEND;TZID=America/New_York:20110905T131000 
RRULE:FREQ=WEEKLY;UNTIL=20111222T230000;BYDAY=MO 
  

Есть мысли?

Ответ №1:

Я знаю, что это старый вопрос, но при использовании Google.Apis.Calendar.v3 в .Net я столкнулся с той же проблемой.

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

Решение было довольно простым: аннулировать OriginalStartDateTime .

 var e = new Event
        {
            Description = "TEST EVENT",
            Location = "Computer",
            Summary = "Test Event. Safe to delete.",
            Start = new EventDateTime{DateTime = new DateTime(2017,05,16, 3, 30, 00), TimeZone = "America/Chicago"}, // This is used as the OriginalStartTime
            End = new EventDateTime{DateTime = new DateTime(2017,05,16, 4, 00, 00), TimeZone = "America/Chicago"}, // This is used as the OriginalStartTime
            ICalUID = Guid.NewGuid().ToString(),
            Organizer = new Event.OrganizerData
            {
                DisplayName = "Test Event"
            },
            Recurrence = new [] { "RRULE:FREQ=WEEKLY;BYDAY=TU,TH;UNTIL=20180701T170000Z" },

            // When set, event does not repeat.
            OriginalStartTime = null //  new EventDateTime{DateTime = new DateTime(2017,05,16), TimeZone="America/Chicago"}
        };

        ... GET SERVICE CODE ...

        var request = googleCalendarService.Events.Import(e, GoogleCalendarId);
        var result = request.Execute();
        return resu<
  

Ответ №2:

Вы также можете попробовать указать TZID в RRULE, я считаю, что это необходимо.