Я ищу способ выяснить, является ли данная дата "праздником", учитывая некоторый праздничный календарь.
А именно, Вы могли бы сказать is_holiday (datetime.date, "USA")
который ответил бы, является ли данная дата праздником для календаря под названием "США".
Я распознаю, что нет никакого тривиального способа делать это для всех праздников в течение всех лет. Например, в то время как Рождество всегда 25-го декабря в целях федерального правительства, иногда мы празднуем (т.е. это не рабочий день), 24-го декабря, и иногда на 26-м. Similary, еврейские праздники (например), ежегодно мигрируют (относительно Григорианского календаря).
Я не ищу вычисления для каждого праздника. Я задаюсь вопросом больше, если существует некоторый принятый, стандартный формат файла, который перечисляет праздники к году, и если так, если существуют какие-либо модули - в Python, а именно, но я гибок - которые понимают, как читать, сказал формат. Точно так же формат файла определил бы выходные - которые являются обычно субботой и в воскресенье, но в определенных регионах это может быть пятница и в субботу и т.д.
Mozilla располагает набором файлов праздничных дней, предоставленных пользователем в формате .ics. Это может помочь вам начать работу. К сожалению, они выходят в различные диапазоны дат. iCalShare также имеет календари выходных дней в формате .ics.
Примечание:
Некоторые праздники относятся к
состоянию
илирегиону
, а не кстране
.
В прошлом я обнаружил, что работает иерархический подход, например, проверка городского праздничного календаря, потом календаря штатов, потом календаря стран.
Для чтения .ics файлов существует модуль Python, называемый icalendar (также на pypi). К сожалению, я не могу поручиться за его качество
. Классический модуль holiday.py (часть старого dateutil
пакета -- достаточно старый, чтобы полагаться на модуль time
, а не на относительно недавнее datetime
! ) хорошо справляется с каландрическими вычислениями (включая переводы по еврейскому <-> григорианскому календарю), но не занимается персистентностью (чтение или запись).
Как следует из ответа Брайана, ics
является доминирующим форматом для "календарей" в файле (а есть файлы праздников, среди прочего, и в таком формате). Для чтения и записи файла ics на Python можно, например, использовать пакет iCalendar, который выполняет именно эту задачу, или vobject, который является гораздо более широким пакетом, поддерживающим диапазон форматов vCard и vCalendar (в том числе и iCalendar).
Читайте Календарные вычисления: http://emr.cs.uiuc.edu/home/reingold/calendar-book/index.shtml
Подробно представлены различные правила, касающиеся праздников в США, с помощью алгоритмов.
Бизнес "Праздновать" (перенос Рождественских праздников на 24-е, потому что 25-е выпадает на субботу) - это простой вопрос для проверки списка федеральных праздников США.
http://www.opm.gov/Operating_Status_Schedules/fedhol/2009.asp
Отдельные штаты, конечно, различаются, как и бизнес. Но это начало.