Как работать с сериями дата-время RRULE и произвольными, не относящимися к RRULE сериями дата-время, согласованно в одном приложении - PullRequest
0 голосов
/ 25 сентября 2019

Как сгенерировать RRULE (любой RRULE, независимо от того, насколько он оптимален) из ряда дат - или, если это не удастся, использовать даты, определенные RRULE, легко совместимым способом со списками дат.

Другими словами, как справиться с произвольными списками дат, которые коллективно решили современная компьютерная наука, невозможно преобразовать в RRULE, одновременно поддерживая подход, который каждый говорит, что он принимает , RRULE .

Тем не менее, получение RRULE из списков дат - это, очевидно, работа для компьютеров, и мне трудно поверить, что это не то, чем вы должны заниматься на третьем курсе бакалавриата по информатике.

Да, я видел этот ответ : «невозможно знать точное правило, которое породило коллекцию дат»

Теперь, я надеюсь, что все садятся, потому что это происходитофигительно, но существует серия повторяющихся дат, которые не были сгенерированы RRULE в первую очередь .

(Не просто шутить;Я сам был удивлен, что библиотечная система в значительном американском городе не будет использовать RRULE для внутреннего использования, но если быть очень конкретным в реальной потребности в этой возможности, она этого не делает, и мы завершим пример из нее.)

Итак, чтобы быть очень ясным, я не ищу «лучшего» RRULE для последовательности datetime, который в любом случае был бы оценочным.Я ищу любой действительный RRULE, автоматически созданный из списка повторяющихся дат.Например: хорошим началом было бы проверить, ежедневно ли это, и, в случае неудачи, создать самый уродливый RRULE, известный человеку или машине, это всего лишь ряд исключений.

И, возможно, это еще один способ подойти к этому: предложенияили примеры того, когда люди используют виджет RRULE для предоставления серии событий, которые не следуют хорошим повторяющимся правилам.Не отступаете ли вы от простого добавления дополнительных дат?

В любом случае, вот обещанный в реальной жизни пример массива дат, с которым придется регулярно иметь дело, которые не являются производными от RRULE сами по себе, но, вероятно, могутбеспорядочно уменьшится до одного:

    "future_dates": [
        {
            "event_id": 4998685,
            "start": "2019-10-01T10:30:00-04:00"
        },
        {
            "event_id": 4998686,
            "start": "2019-10-08T10:30:00-04:00"
        },
        {
            "event_id": 4998687,
            "start": "2019-10-15T10:30:00-04:00"
        },
        {
            "event_id": 4998688,
            "start": "2019-10-22T10:30:00-04:00"
        },
        {
            "event_id": 4998689,
            "start": "2019-10-29T10:30:00-04:00"
        },
        {
            "event_id": 4998690,
            "start": "2019-11-05T10:30:00-05:00"
        },
        {
            "event_id": 4998691,
            "start": "2019-11-12T10:30:00-05:00"
        },
        {
            "event_id": 4998692,
            "start": "2019-11-19T10:30:00-05:00"
        },
        {
            "event_id": 4998693,
            "start": "2019-11-26T10:30:00-05:00"
        },
        {
            "event_id": 4998694,
            "start": "2019-12-03T10:30:00-05:00"
        },
        {
            "event_id": 4998695,
            "start": "2019-12-10T10:30:00-05:00"
        },
        {
            "event_id": 4998696,
            "start": "2019-12-17T10:30:00-05:00"
        },
        {
            "event_id": 4998698,
            "start": "2019-12-31T10:30:00-05:00"
        },
        {
            "event_id": 4998699,
            "start": "2020-01-07T10:30:00-05:00"
        },
        {
            "event_id": 4998700,
            "start": "2020-01-14T10:30:00-05:00"
        },
        {
            "event_id": 4998701,
            "start": "2020-01-21T10:30:00-05:00"
        },
        {
            "event_id": 4998702,
            "start": "2020-01-28T10:30:00-05:00"
        },
        {
            "event_id": 4998703,
            "start": "2020-02-04T10:30:00-05:00"
        },
        {
            "event_id": 4998704,
            "start": "2020-02-11T10:30:00-05:00"
        },
        {
            "event_id": 4998705,
            "start": "2020-02-18T10:30:00-05:00"
        },
        {
            "event_id": 4998706,
            "start": "2020-02-25T10:30:00-05:00"
        },
        {
            "event_id": 4998707,
            "start": "2020-03-03T10:30:00-05:00"
        },
        {
            "event_id": 4998708,
            "start": "2020-03-10T10:30:00-04:00"
        },
        {
            "event_id": 4998709,
            "start": "2020-03-17T10:30:00-04:00"
        },
        {
            "event_id": 4998710,
            "start": "2020-03-24T10:30:00-04:00"
        },
        {
            "event_id": 4998711,
            "start": "2020-03-31T10:30:00-04:00"
        },
        {
            "event_id": 4998712,
            "start": "2020-04-07T10:30:00-04:00"
        },
        {
            "event_id": 4998713,
            "start": "2020-04-14T10:30:00-04:00"
        },
        {
            "event_id": 4998714,
            "start": "2020-04-21T10:30:00-04:00"
        },
        {
            "event_id": 4998715,
            "start": "2020-04-28T10:30:00-04:00"
        },
        {
            "event_id": 4998716,
            "start": "2020-05-05T10:30:00-04:00"
        },
        {
            "event_id": 4998717,
            "start": "2020-05-12T10:30:00-04:00"
        },
        {
            "event_id": 4998718,
            "start": "2020-05-19T10:30:00-04:00"
        },
        {
            "event_id": 4998719,
            "start": "2020-05-26T10:30:00-04:00"
        },
        {
            "event_id": 4998720,
            "start": "2020-06-02T10:30:00-04:00"
        },
        {
            "event_id": 4998721,
            "start": "2020-06-09T10:30:00-04:00"
        },
        {
            "event_id": 4998722,
            "start": "2020-06-16T10:30:00-04:00"
        },
        {
            "event_id": 4998723,
            "start": "2020-06-23T10:30:00-04:00"
        },
        {
            "event_id": 4998724,
            "start": "2020-06-30T10:30:00-04:00"
        },
        {
            "event_id": 4998725,
            "start": "2020-07-07T10:30:00-04:00"
        },
        {
            "event_id": 4998726,
            "start": "2020-07-14T10:30:00-04:00"
        },
        {
            "event_id": 4998727,
            "start": "2020-07-21T10:30:00-04:00"
        },
        {
            "event_id": 4998728,
            "start": "2020-07-28T10:30:00-04:00"
        },
        {
            "event_id": 4998729,
            "start": "2020-08-04T10:30:00-04:00"
        },
        {
            "event_id": 4998730,
            "start": "2020-08-11T10:30:00-04:00"
        },
        {
            "event_id": 4998731,
            "start": "2020-08-18T10:30:00-04:00"
        },
        {
            "event_id": 4998732,
            "start": "2020-08-25T10:30:00-04:00"
        },
        {
            "event_id": 4998733,
            "start": "2020-09-01T10:30:00-04:00"
        },
        {
            "event_id": 4998734,
            "start": "2020-09-08T10:30:00-04:00"
        },
        {
            "event_id": 4998735,
            "start": "2020-09-15T10:30:00-04:00"
        },
        {
            "event_id": 4998736,
            "start": "2020-09-22T10:30:00-04:00"
        },
        {
            "event_id": 4998737,
            "start": "2020-09-29T10:30:00-04:00"
        },
        {
            "event_id": 4998738,
            "start": "2020-10-06T10:30:00-04:00"
        },
        {
            "event_id": 4998739,
            "start": "2020-10-13T10:30:00-04:00"
        },
        {
            "event_id": 4998740,
            "start": "2020-10-20T10:30:00-04:00"
        },
        {
            "event_id": 4998741,
            "start": "2020-10-27T10:30:00-04:00"
        },
        {
            "event_id": 4998742,
            "start": "2020-11-03T10:30:00-05:00"
        },
        {
            "event_id": 4998743,
            "start": "2020-11-10T10:30:00-05:00"
        },
        {
            "event_id": 4998744,
            "start": "2020-11-17T10:30:00-05:00"
        },
        {
            "event_id": 4998745,
            "start": "2020-11-24T10:30:00-05:00"
        },
        {
            "event_id": 4998746,
            "start": "2020-12-01T10:30:00-05:00"
        },
        {
            "event_id": 4998747,
            "start": "2020-12-08T10:30:00-05:00"
        },
        {
            "event_id": 4998748,
            "start": "2020-12-15T10:30:00-05:00"
        },
        {
            "event_id": 4998749,
            "start": "2020-12-22T10:30:00-05:00"
        },
        {
            "event_id": 4998750,
            "start": "2020-12-29T10:30:00-05:00"
        },
        {
            "event_id": 4998751,
            "start": "2021-01-05T10:30:00-05:00"
        },
        {
            "event_id": 4998752,
            "start": "2021-01-12T10:30:00-05:00"
        }
    ]

1 Ответ

1 голос
/ 26 сентября 2019

Если у вас есть совершенно произвольный список вхождений, вы, вероятно, захотите использовать набор RDATE вместо RRULE.Смотри https://tools.ietf.org/html/rfc5545#section-3.8.5.2

...