Есть ли что-то, что представляло бы такой период, как «первый понедельник каждого месяца», например, cron?

java #cron #scheduled-tasks #scheduler

#java #хрон #запланированные задачи #планировщик

Вопрос:

У меня есть приложение, в котором пользователи могут создавать повторяющиеся задачи, такие как «каждые 2 недели» или «каждый первый понедельник месяца каждого месяца».

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

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

Этот «период» должен храниться в виде строки и, если возможно, иметь существующие библиотеки js и java для его создания и генерации следующего datetime.

Если ничего не существует.. что ж, я создам свое собственное решение / формат.

Спасибо

Комментарии:

1. Это может помочь: freeformatter.com/cron-expression-generator-quartz.html или вот это: cronmaker.com — выражение для первого понедельника месяца будет следующим: 0 0 0 ? * 2#1 *

Ответ №1:

Как сказал Томас, формат, используемый Quartz, допускает больше вариантов использования и работает в большинстве шахт. Спасибо

http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html
https://www.freeformatter.com/cron-expression-generator-quartz.html

Ответ №2:

Первый понедельник каждого месяца означает:

  • День недели = 1
  • День месяца = 1-7

Что в качестве выражения cron является:

 0 0 1-7 * 1
│ │  │  │ └─ Day of week 1 (Monday)
│ │  │  └─── Every month
│ │  └────── Day of month 1-7
│ └───────── Hour 0
└─────────── Minute 0
 

или более читаемый:

 0 0 1-7 * MON