Какова хорошая структура данных для периодических или повторяющихся дат?

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

  •  06-07-2019
  •  | 
  •  

Вопрос

Существует ли опубликованная структура данных для хранения периодических или повторяющихся дат?Что-то, что может справиться:

  1. Насос требует переработки каждые пять дней.
  2. День зарплаты – каждая вторая пятница.
  3. День благодарения — второй понедельник октября (США:четвертый четверг ноября).
  4. День святого Валентина отмечается ежегодно 14 февраля.
  5. Солнцестояние (обычно) бывает 21 июня и 21 декабря.
  6. Пасха — это воскресенье после первого полнолуния в день весеннего равноденствия или после него (ладно, это немного натянуто).

Я считаю cronВнутренняя структура данных может обрабатывать №1, №4, №5 (два правила) и, возможно, №2, но я ее не рассматривал.MS Outlook и другие календари, кажется, способны обрабатывать первые пять, но у меня нет этого исходного кода.

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

Решение

Использовать iCalendar библиотека реализации, например эти: Рубин, Джава, php, питон, .сеть и Джава, а затем добавьте поддержку расчета особых дат.

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

Учитывая все эти различия в способе определения повторения, я бы отказался от одной реализации структуры данных, чтобы учесть все 5 сценариев.

Вместо этого я (и для предыдущего проекта) построил бы простые структуры, которые обращались бы к каждому типу повторения. Вы можете обернуть их все так, чтобы они выглядели как единая структура данных, но под капотом они могли делать все, что им нравится. Благодаря реализации интерфейса я смог одинаково обработать каждый тип повторения, чтобы он выглядел как единая структура данных, подходящая для всех. Я мог бы запросить у любого экземпляра все даты повторения в течение определенного периода времени, и это помогло.

Я также хотел бы узнать больше о том, как эти даты нужно использовать, прежде чем остановиться на конкретной реализации.

Если вы хотите на практике создать структуру данных, я бы порекомендовал хеш-таблицу (где праздники или события являются ключами с новым вхождением даты в качестве значения), если существует множество различных вхождений, которые можно хэшировать значение, которое находит раздел в связанном списке, который затем содержит список всех вхождений (это приведет к выполнению поиска и вставки в O (1)).

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