Skip to content

Commit 2aedd8d

Browse files
authored
BAEL-9173: Getting Next Fire Time of Quartz (#18321)
* BAEL-9173: Getting Next Fire Time of Quartz * BAEL-9173: Getting Next Fire Time of Quartz * BAEL-9173: Getting Next Fire Time of Quartz (fix precision issue) * BAEL-9173: Getting Next Fire Time of Quartz (fix precision issue)
1 parent 9cb9838 commit 2aedd8d

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed
Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package com.baeldung.quartz;
22

3-
import org.quartz.Job;
4-
import org.quartz.JobDataMap;
5-
import org.quartz.JobExecutionContext;
6-
import org.quartz.JobExecutionException;
3+
import org.quartz.*;
4+
5+
import java.util.Date;
76

87
public class SimpleJob implements Job {
98

@@ -14,5 +13,10 @@ public void execute(JobExecutionContext context) throws JobExecutionException {
1413
float myFloatValue = dataMap.getFloat("myFloatValue");
1514

1615
System.out.println("Job says: " + jobSays + ", and val is: " + myFloatValue);
16+
17+
// Access the Trigger to get the next fire time
18+
Trigger trigger = context.getTrigger();
19+
Date nextFireTime = trigger.getNextFireTime();
20+
System.out.println("Next execution: " + nextFireTime);
1721
}
1822
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.baeldung.quartz;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.quartz.CronExpression;
5+
6+
import java.text.ParseException;
7+
import java.util.Calendar;
8+
import java.util.Date;
9+
10+
import static org.junit.jupiter.api.Assertions.assertEquals;
11+
import static org.junit.jupiter.api.Assertions.assertNotNull;
12+
13+
public class QuartzUnitTest {
14+
15+
@Test
16+
void givenCronExpressionAndTestTime_whenCalculatingNextFireTime_thenCorrectNextFireTimeIsReturned() throws ParseException {
17+
String cronExpression = "0 0/2 8-17 * * ?"; // Fires every 2 minutes between 8 AM and 5 PM
18+
CronExpression expression = new CronExpression(cronExpression);
19+
20+
Calendar calendar = Calendar.getInstance();
21+
calendar.set(Calendar.HOUR_OF_DAY, 10);
22+
calendar.set(Calendar.MINUTE, 0);
23+
calendar.set(Calendar.SECOND, 0);
24+
calendar.set(Calendar.MILLISECOND, 0); // Ensure no milliseconds for testTime
25+
Date testTime = calendar.getTime(); // Set a fixed time: 10:00 AM
26+
27+
Date nextFireTime = expression.getNextValidTimeAfter(testTime);
28+
29+
assertNotNull(nextFireTime);
30+
31+
// The next fire time should be at 10:02 AM
32+
calendar.add(Calendar.MINUTE, 2);
33+
Date expectedNextFireTime = calendar.getTime();
34+
35+
// Compare the times in seconds (ignoring milliseconds)
36+
long nextFireTimeInSeconds = nextFireTime.getTime() / 1000;
37+
long expectedNextFireTimeInSeconds = expectedNextFireTime.getTime() / 1000;
38+
39+
assertEquals(expectedNextFireTimeInSeconds, nextFireTimeInSeconds);
40+
}
41+
42+
}

0 commit comments

Comments
 (0)