Запланируйте задание, используя выражение cron не григорианского календаря - PullRequest
0 голосов
/ 16 октября 2018

Есть ли способ запланировать задания cron с помощью исламского календаря?В идеале:

CronExpression cronExpression = new CronExpression("0 0 0 1 * ? *", CalendarEnum.ISLAMIC);

Я изо всех сил пытаюсь найти наименьшую подсказку в документации по Java Quartz (1 упоминание в разделе QA), и я проверил исходный код и обнаружил, что календарь по умолчанию (нашел его в CronExpression.java ) - григорианский.Есть ли способ достичь этого с помощью включения / исключения org.quartz.Calendar?Я думаю, нет, верно?

Кто-нибудь знает, как расширить / реализовать различные варианты выражения cron, чтобы охватить, например, исламский календарь?Или альтернативные библиотеки с открытым исходным кодом (размещенные на центральном репозитории mvn)?Или вообще какой-либо подход, чтобы добиться абстрактного способа выражения рецидива (например, повторять каждый 1-й день каждого исламского месяца)? ​​

Временно я думаю вручную связать несколько дат org.quartz.Trigger сработа (переводится с исламского на григорианский).Но это не является оптимальным, так как одно выражение cron может привести к дюжине или сотне дат.

Извините, но не настолько технический вопрос, но тема, кажется, раскрыта и информации немного.

1 Ответ

0 голосов
/ 16 октября 2018

Поскольку исламский календарь и григорианский календарь не выровнены, а исламские месяцы имеют другую длину, чем григорианские месяцы, это довольно сложно.Я бы предложил выполнить реализацию cron следующего стиля (стиль Linux Cron):

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *   command to be executed
  x  y  *  *  *   IslamicMonthTestCmd && command

Идея состоит в том, чтобы ежедневно проводить тестирование в x часах и y минутах, чтобы проверить, включен ли вы.первый из исламского месяца.Это делается с помощью IslamicMonthTestCmd, который вы все равно должны написать сами.Если этот тест пройден, вы выполняете command.

. Написание этого IslamicMonthTestCmd не является простым, поскольку исламский календарь, в отличие от григорианского, находится под сильным влиянием людей.Месяцы зависят от видимости новолуния религиозными властями и, следовательно, могут различаться на один или два дня, на которые явно влияют люди, погода и различные другие помехи.Текущий исламский год - 1440 г. хиджры.В григорианском календаре 1440 год хиджры начинается с приблизительно 11 сентября 2018 года до 30 августа 2019 года. [источник: Википедия ]

...