Вопрос об определении правила повторения (RFC2445)

StackOverflow https://stackoverflow.com/questions/496308

Вопрос

Я использую реализацию RFC2445 от Google (http://code.google.com/p/google-rfc-2445/) для правил повторения.Если я определю ЕЖЕМЕСЯЧНУЮ повторяемость, начинающуюся 30 января, месяцы с продолжительностью менее 30 дней (т. Е. февраль) будут полностью пропущены.Таким образом, Google API вернет 30 января, 30 марта, 30 апреля и т.д.нехорошо.Я бы ожидал, что он вернется:30 января, 28 февраля, 30 марта, 30 апреля.

Аналогично, если бы я выбрал дату начала 31 января, то любые месяцы, в которых меньше 31 дня, были бы пропущены.

Это может быть правильно в соответствии со спецификацией RFC2445 или может быть ошибкой.А ты как думаешь?

Мой главный вопрос заключается в том, есть ли какой-либо способ определить правило, в котором говорится "повторяться 30 числа каждого месяца;или в последний день месяца, если 30-го числа не существует".Я не верю, что это так.Есть какие-нибудь предложения?

Заранее благодарю.

С уважением, Кормак

Это было полезно?

Решение

Ответ таков:FREQ= ЕЖЕМЕСЯЧНО;BYMONTHDAY = 28,29,30;BYSETPOS= -1, что переводится как "повторяться 30 числа каждого месяца;или в последний день месяца, если 30-го числа не существует".

Другие советы

Похоже, вы правы насчет того, что RFC пропускает эти даты.Если ваш DTSTART 31 января, и вы не указываете BYMONTHDAY в вашем правиле повторения (или если BYMONTHDAY 31-го), то он просто проигнорирует это правило в месяцы, когда такого дня нет:

Если найдены значения части правила BYxxx которые выходят за пределы доступной области (т.Е. BYMONTHDAY=30 в феврале), они просто игнорируются.

Однако, вы должны быть в состоянии указать -1 для BYMONTHDAY и пусть он использует последний день месяца, каким бы он ни был.

Часть правила BYMONTHDAY определяет Символ ЗАПЯТОЙ (ASCII decimal 44) разделенный список дней месяца.Допустимые значения - от 1 до 31 или от -31 до -1.Например, -10 представляет десятое до последнего дня месяца.

Ну, глядя на RFC 2445 само по себе определенно кажется, что поведение, которое вы видите, является правильным:

Если найдены значения части правила BYxxx, которые выходят за пределы доступной области (например, BYMONTHDAY=30 в феврале), они просто игнорируются.

Единственное решение, которое я могу придумать, - это использовать несколько правил повторения, т. е.один за 30-е число каждого месяца, а другой за последний день февраля.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top