Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
9674: feat(engine): support cron expression for timer cycle. r=korthout a=lzgabel ## Description <!-- Please explain the changes you made here. --> As a user, I want to be able to set the `cron expression` for `timer cycle`. Parse the given crontab expression string. The string has six single space-separated time and date fields: <pre> ┌───────────── second (0-59) │ ┌───────────── minute (0 - 59) │ │ ┌───────────── hour (0 - 23) │ │ │ ┌───────────── day of the month (1 - 31) │ │ │ │ ┌───────────── month (1 - 12) (or JAN-DEC) │ │ │ │ │ ┌───────────── day of the week (0 - 7) │ │ │ │ │ │ (0 or 7 is Sunday, or MON-SUN) │ │ │ │ │ │ * * * * * * </pre> The following rules apply: * A field may be an asterisk (*), which always stands for "first-last". For the "day of the month" or "day of the week" fields, a question mark (?) may be used instead of an asterisk. * Ranges of numbers are expressed by two numbers separated with a hyphen (-). The specified range is inclusive. * Following a range (or *) with /n specifies the interval of the number's value through the range. * English names can also be used for the "month" and "day of week" fields. Use the first three letters of the particular day or month (case does not matter). * The "day of month" and "day of week" fields can contain a L-character, which stands for "last", and has a different meaning in each field: * In the "day of month" field, L stands for "the last day of the month". If followed by an negative offset (i.e. L-n), it means "nth-to-last day of the month". If followed by W (i.e. LW), it means "the last weekday of the month". * In the "day of week" field, L stands for "the last day of the week". If prefixed by a number or three-letter name (i.e. dL or DDDL), it means "the last day of week d (or DDD) in the month". * The "day of month" field can be nW, which stands for "the nearest weekday to day of the month n". If n falls on * Saturday, this yields the Friday before it. If n falls on Sunday, this yields the Monday after, which also happens if n is 1 and falls on a Saturday (i.e. 1W stands for "the first weekday of the month"). * The "day of week" field can be d#n (or DDD#n), which stands for "the n-th day of week d (or DDD) in the month". #### Example expressions: * "0 0 * * * *" = the top of every hour of every day. * "*/10 * * * * *" = every ten seconds. * "0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day. * "0 0 6,19 * * *" = 6:00 AM and 7:00 PM every day. * "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 every day. * "0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays * "0 0 0 25 12 ?" = every Christmas Day at midnight * "0 0 0 L * *" = last day of the month at midnight * "0 0 0 L-3 * *" = third-to-last day of the month at midnight * "0 0 0 1W * *" = first weekday of the month at midnight * "0 0 0 LW * *" = last weekday of the month at midnight * "0 0 0 * * 5L" = last Friday of the month at midnight * "0 0 0 * * THUL" = last Thursday of the month at midnight * "0 0 0 ? * 5#2" = the second Friday in the month at midnight * "0 0 0 ? * MON#1" = the first Monday in the month at midnight of the month at midnight * "0 0 0 * * 5L" = last Friday of the month at midnight * "0 0 0 * * THUL" = last Thursday of the month at midnight * "0 0 0 ? * 5#2" = the second Friday in the month at midnight * "0 0 0 ? * MON#1" = the first Monday in the month at midnight ## Related issues <!-- Which issues are closed by this PR or are related --> closes #9673 Co-authored-by: lzgabel <lz19960321lz@gmail.com>
- Loading branch information