Праздники - есть ли реализация Java?
Я хотел бы знать, есть ли там jar файл, который мог бы сделать следующее:
DateMidnight dateInQuestion = new DateMidnight(12,12,2000);
DateChecker.isNationalHoliday(dateInQuestion, Locale.ITALY);
Если нет, то почему? Конечно, в 99% случаев существует множество правильных правил для праздников.
Сейчас мы используем таблицу в нашей базе данных, а страны + у нас есть какая-то реализация, когда речь идет о праздниках, которые не относятся к одной и той же дате каждый год. Мы должны добавить к нашей реализации для каждой новой страны, в которой мы получаем новых клиентов.
Можем ли мы сделать это более простым способом?
(Если в сфере java нет такой вещи, могу ли я перенести ее с другого языка?)
Ответы
Ответ 1
Насколько я знаю, на Java нет ничего надежного. Это также имеет смысл, такая информация чрезвычайно чувствительна к изменениям. Hardcoding это сделает ваш код потенциально ломающимся при каждом обновлении Java, что может привести к большому количеству проблем, связанных с обслуживанием и совместимостью. В настоящее время в самом лучшем случае временные интервалы жестко закодированы/сохранены в Java SE и даже одни, что уже привело к многим ошибкам.
Скорее используйте для этого общедоступный веб-сервис. Например. http://www.bank-holidays.com
Этот сайт информирует вас обо всех днях, когда банки (а также фондовая биржа и школьные каникулы в ряде стран) закрываются в связи с религиозными или общественными событиями. Также перечислены основные события (выборы, объявленные забастовки, ярмарки, фестивали, спортивные события...).
Наша БЕСПЛАТНАЯ СЛУЖБА позволяет просматривать текущий календарный год (только просмотр). За 2 евро/страну/год наша ПЛАТНАЯ ОБСЛУЖИВАНИЕ (щелкните значок кредитной карты) дает вам доступ к календарным годам 2000-2070 годов.
И напишите обертку Java вокруг этого. Или найдите существующий Java API, которые, в свою очередь, уже поддерживаются веб-сервисом.
Ответ 2
Я написал Jollyday API, и мне интересно узнать, что это такое "грубо". Как я могу улучшить его? Было бы здорово услышать от вас. Пришлите мне письмо по адресу [email protected], если хотите.
Кстати. Jollyday используется только так, как спрашивает его спрашивающий. Пожалуйста, смотрите сами.
Приветствия, Свен
P.S.: Я нашел бесплатный веб-сервис от Ulrich Hilger, который предоставляет подробную информацию о всемирном отдыхе. Посмотрите api.daybase.eu
Ответ 3
Я также написал java-обертку вокруг Ruby Holidays Gem (она доступна на Github: https://github.com/gdepourtales/holidays. Она похожа на Jollyday (http://sourceforge.net/projects/jollyday/).
Ответ 4
Мой поиск привел два результата (в дополнение к тому, что я указал в комментариях). Во-первых, API клиентского клиента, кажется, мертвый проект. Второй, Jollyday, выглядит как очень грубая, но активная работа.
Что касается того, почему нет хорошей библиотеки, я с Томом. Я подозреваю, что ваше предположение "Конечно, есть много правильных правил для праздников в 99% случаев" неверно.
Ответ 5
Думаю, вам придется самому сделать работу.
Национальные праздники определяются, ну, нациями. Они могут меняться и по определению не универсальны и поэтому не могут быть захвачены каким-либо алгоритмом.
Единственный способ отслеживать их - поддерживать их на основе каждой страны.
Возможно, кто-то на самом деле уже делает это (возможно, веб-сервис), но я сомневаюсь в этом, если честно.
Ответ 6
До сих пор я никого не видел.
Но то, что я мог бы предложить для u, - попытаться связать с Google Calendar api, который оттуда пытается получить календарь праздника через календарный канал или что-то другое, назовите его.
Оттуда обработайте данные, а если хотите, сохраните их в своей базе данных.
В конце концов, если у вас есть активное интернет-соединение, вы можете использовать java для подключения к соответствующим данным
Даже для других языков я не думаю, что такие прямые методы доступны.
Ответ 7
Я нашел это интересным:
Поставщик услуг RESTful - API отпуска
Для проектов Node - node-holidayapi
Я знаю, что это не относится к вопросу, заданному для реализации Java. Но если ваш проект RESTful (как и большинство проектов в настоящее время), это даст вам место для начала.;)