Create a cron that runs every friday with a specific interval - java

I want to create a cron that runs in this interval 16/01/2023 - 15/06/2023 every friday at 12 o'clock.
The cron that i created is "0 0 12 ? 1-6 FRI 2023" but i do not know how to put the days interval for january and june.

AFAIK you cannot. Probable 3 schedules:
0 0 12 16-31 1 FRI 2023
0 0 12 ? 2-5 FRI 2023
0 0 12 1-15 6 FRI 2023

Related

Spring #Scheduled(cron = "0 0/3 00-23 * * ?") : How to specify minutes?

https://crontab.cronhub.io/ states that expression "0 0/3 00-23 * * ?" will result in to
Every 3 minutes, between 12:00 AM and 11:59 PM
However, I tried reading a lot of blogs but was incapable to discover how can I make an update to corn expression to do below, please guide.
Every 3 minutes, between 12:15 AM and 11:45 PM
Cron expression consists of five fields:
<minute> <hour> <day-of-month> <month> <day-of-week> <command>
At 12:00 p.m. (noon) every day:
0 12 * * ?
Every five minutes starting at 1 p.m. and ending at 1:55 p.m. and then starting at 6 p.m. and ending at 6:55 p.m., every day:
0/5 13,18 * * ?
Every minute starting at 1 p.m. and ending at 1:05 p.m., every day:
0-5 13 * * ?
For more info: https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/scheduling.html
Make two cron entries.
One for the exact minutes (45,48,51,54,57) in hour 11 and one for the exact minutes (0,3,6,9,12,15) in hour 12.

How do I get Cron Expression over a specific range of dates?

I want to get valid dates between certain dates via cron expression. Is this possible?
Returns only 1 with getNextValidTimeAfter.
For example, my statement is as follows;
0 0 0? MAY, JUN, JUL MON, TUE 2020-2024
This means:
At 00:00:00 am, on every Monday and Tuesday, in May, June and July, between 2020 and 2024
What I want to do is;
To bring the days in this statement between June 2020 and September 2020.
Months are entered as numbers so it should be something like this: 0 0 0 ? 5-9 * 2020-2024. Look at this resource for more information.

How to run a job from 20.35 until 23.35 every 30 minutes, some days a week?

I am facing a problem with cron expression.
I have to ran a method from Thursday to Sunday by every 30 minutes. It time will start from 20:35 min till 23:35 min.
Cron expression:
"0 35/30 20-23 ? * THU-SUN";
As per my understanding; My method will invoke at 20:35 min at Thursday by every 30 minutes till Sunday.
My Expectation:
Method will invoke as per below timings:
Thu May 19 20:35:00 IST 2016
Thu May 19 21:05:00 IST 2016
Thu May 19 21:40:00 IST 2016
But; Method get invokes by below timings:
Thu May 19 20:35:00 IST 2016
Thu May 19 21:35:00 IST 2016
Thu May 19 22:35:00 IST 2016
Can anyone help me out. Why cron expression evaluating by every 1 hour.??
Here is code example:
#Scheduled(cron="0 35/30 20-23 ? * THU-SUN")
public void startInboundSFTPChannel(){
logger.info("Cron job started....");
downloadSftpFilesController();
}
If you want the command to run from 20.35 to 23.35 every day, from Thursday to Sunday, you can define it in two steps:
35 20 ? * THU-SUN
5-59 21-23 ? * THU-SUN
There is no easy way to set this up in just a cron expression, because you don't want it to run at 20.05.
That is: at 20 , run at the minute 35. At 21 to 23 h, every 30 minutes with an offset of 5 minutes.
I based my answer on this format:
+---------------- minute (0 - 59)
| +------------- hour (0 - 23)
| | +---------- day of month (1 - 31)
| | | +------- month (1 - 12)
| | | | +---- day of week (0 - 6) (Sunday=0 or 7)
| | | | |
* * * * * command to be executed
As I understand, your expression (0 35/30 20-23 ? * THU-SUN) means:
0 - run at full minute only,
35/30 - run every 30 minutes starts from 35,
20-23 - run hours between 20 and 23,
? - use implicit days from later part of expression,
* run at every single month,
THU-SUN - run at Thursday, Friday, Saturday and Sunday.
So, as you specified an increment instead of two values Quartz (which Spring uses) tries to calulate this like the following:
first, it calculates the value 35 for minutes - what matches 0-59 condition,
second, it adds 30 to previous 35 (which equals 65) what not matches 0-59 condition,
at the end, the only correct value is 35.
So, it runs your code every single hour when minutes == 35.
Can you handle running the code one more time at Thu May 19 20:05:00 IST 2016?
If yes, then you can use one of the following expressions:
0 5,35 20-23 ? * THU-SUN
Which means:
0 - run at full minute only,
5,35 - run every 30 minutes, starting from minutes == 5,
20-23 - run hours between 20 and 23,
? - use implicit days from later part of expression,
* - run at every single month,
THU-SUN - run at Thursday, Friday, Saturday and Sunday.
0 5/30 20-23 ? * THU-SUN
Which means:
0 - run at full minute only,
5/30 - run every 30 minutes starting from minutes == 5,
20-23 - run hours between 20 and 23,
? - use implicit days from later part of expression,
* - run at every single month,
THU-SUN - run at Thursday, Friday, Saturday and Sunday.
Here you can find similar problem.

Get delta value corrected with different timestamps

First, sorry for the title. I didn't know what is the best way to answer this. Any suggestion for a better title will be good
I have a database with the following data:
ID UP TIMESTAMP
---------- ---------- --------------------
2 1 2016/01/01 00:00:00
3 2 2016/01/01 01:00:00
4 16 2016/01/01 03:00:00
5 32 2016/01/01 04:00:00
6 42 2016/01/01 10:00:00
7 66 2016/01/01 12:00:00
8 78 2016/01/01 15:00:00
9 100 2016/01/01 16:00:00
10 207 2016/01/01 20:00:00
The value in UP is always increasing. So, what I do to calculate the delta value is the following:
(value - lastvalue)/(timestamp - lasttimestamp)
This is calculared correctly, I can draw the information like this:
THE PROBLEM is that the timestamps are not separated in the same timeframe, so the graphic is somehow misleading because between values of the same length can have hours of different. So my question is, Is there any algorithm(in java or SQL) that could help me to fix the data so the gaps between each value are of the same timeframe?
Thanks!
Suppose the minimal time difference (timestamp - lasttimestamp) is 01:00:00.
You can create a new temporary table like this:
ID UP TIMESTAMP
---------- ---------- --------------------
2 1 2016/01/01 00:00:00
3 2 2016/01/01 01:00:00
4 2 2016/01/01 02:00:00
5 16 2016/01/01 03:00:00
6 32 2016/01/01 04:00:00
7 32 2016/01/01 05:00:00
8 32 2016/01/01 06:00:00
9 32 2016/01/01 07:00:00
10 32 2016/01/01 08:00:00
11 32 2016/01/01 09:00:00
12 42 2016/01/01 10:00:00
13 42 2016/01/01 11:00:00
14 66 2016/01/01 12:00:00
15 66 2016/01/01 13:00:00
16 66 2016/01/01 14:00:00
17 78 2016/01/01 15:00:00
18 100 2016/01/01 16:00:00
19 100 2016/01/01 17:00:00
20 100 2016/01/01 18:00:00
21 100 2016/01/01 19:00:00
22 207 2016/01/01 20:00:00
You can then plot the graph using this table. The time stamps will be separated with constant time frame.

cron expression for the last weekend of the month

i have a job to be run on the last weekend of the month (i.e) if the month has a sunday at the end it should run on sunday and if the month ends or has a saturday at the end the job should run on saturday.
I didnt find any documentation to build a cron expression for this case.
Thanks in advance.
You can use L in the day of week field
0 0 0 ? * SUNL
This will trigger at every last SUN of every month, e.g.
Sunday, August 31, 2014 12:00 AM
Sunday, September 28, 2014 12:00 AM
Sunday, October 26, 2014 12:00 AM
Sunday, November 30, 2014 12:00 AM
Sunday, December 28, 2014 12:00 AM
I don't see a way to specify the last weekend of a month since quartz does not allow to combine the L character with multiple days of week. So you can't do something like SATL,SUNL. If you want to trigger something on every last SAT and SUN I would define 2 cron expressions.
From the quartz documentation (Special characters)
L ("last") - .....
for example "6L" means "the last friday of the month".
I tested it with my cron expression view - a plugin that I wrote for eclipse
https://github.com/link-intersystems/eclipse-plugins-repository. Maybe it is also useful for you,

Categories

Resources