Кварцевая проблема
Что я хочу: я хочу исключить время, скажем, сегодня начинается в 14:00 и заканчивается послезавтра в 13:00.
Показано, что я сделал в приведенном ниже коде.
Проблема с кодом
Но проблема с моим кодом состоит в том, что я включил dailyCalendar, который исключает время, независимо от того, на какую дату вы прошли, он будет работать ежедневно ..
Что представляет собой код
У меня есть один ежедневный календарь на первую дату и другой ежедневный календарь на конечный день, а между этими датами holidayCalendar позаботится об этом.
DoOwn. java
(фактическая реализация с использованием dailyCalendar и holidayCalendar)
package com.javarticles.quartz;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
import java.util.Arrays;
import com.sun.scenario.effect.impl.state.LinearConvolveRenderState;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.calendar.BaseCalendar;
import org.quartz.impl.calendar.DailyCalendar;
import org.quartz.impl.calendar.HolidayCalendar;
public class DoOwn {
static DailyCalendar dayCalendar;
static HolidayCalendar holidayCalendar;
public static long getStartOfDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
}
public static long getEndOfDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTimeInMillis();
}
private static Long getDate(String s) {
try {
Date date= new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(s);
long epochTime =date.getTime();
return epochTime;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) throws SchedulerException {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
// Exclusions exclusion = new Exclusions(new ArrayList<Date>(Arrays.asList(new Date(),new Date(1586908800L),new Date(1586995200L),new Date(1587081600L))),new ArrayList<TimeRange>())
String dt ="13/04/2020 22:10-17/04/2020 20:00";
try {
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("triggerName", "fireAfterEvery2Seconds");
JobDetail jobDetail = JobBuilder.newJob(SimpleJob.class)
.usingJobData(jobDataMap).withIdentity("job1", "group")
.build();
String [] value=dt.split("-");
String startDate=value[0];
String endDate=value[1];
System.out.println("String StartDate : "+startDate+" String EndDate : "+endDate);
long epochStartDate = getDate(startDate);
long epochEndDate = getDate(endDate);
Date endDate1=null;
Date startDate1=null;
try{
/**
* parse : Should be in try catch block
*/
startDate1 = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(startDate); //
System.out.println("Start Date(Formatted) : "+startDate1);
} catch (Exception e){
e.printStackTrace();
}
try{
endDate1 = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(endDate);
System.out.println("End Date(Formatted) : "+endDate1);
} catch (Exception e){
e.printStackTrace();
}
long epo1 = getEndOfDay(startDate1);
DailyCalendar d1 =new DailyCalendar(epochStartDate,epo1);
long epo2 = getStartOfDay(endDate1);
DailyCalendar d2 = new DailyCalendar(d1,epo2,epochEndDate);
LocalDate startLocalDate = startDate1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate endLocalDate = endDate1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
HolidayCalendar h1 = new HolidayCalendar(d2);
int k=0;
for(LocalDate iterateDate = startLocalDate.plusDays(1); iterateDate.isBefore(endLocalDate); iterateDate = iterateDate.plusDays(1))
{
Date date1 = Date.from(iterateDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
System.out.println("Excluded Date : "+k+" = "+date1);
h1.addExcludedDate(date1);
k++;
}
scheduler.addCalendar("holidayCalendar",h1, true, true);
scheduler.scheduleJob(jobDetail, Triggers.fireAfterEvery2Seconds("holidayCalendar"));
} catch (SchedulerException e) {
e.printStackTrace();
}
}
private static Logger LOGGER = Logger
.getLogger(DoOwn.class
.getSimpleName());
}
SimpleJob. java
package com.javarticles.quartz;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class SimpleJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
String triggerName = (String) jobDataMap.get("triggerName");
if (triggerName != null) {
System.out.println("Tigger " + triggerName + ", fired at " + new Date());
}
}
}
Триггеры. java
package com.javarticles.quartz;
import static org.quartz.DateBuilder.futureDate;
import static org.quartz.DateBuilder.IntervalUnit.SECOND;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
public class Triggers {
public static Trigger fireAfterEvery2Seconds(String calendarName) {
SimpleTrigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("trigger1", "group")
.modifiedByCalendar(calendarName)
.withSchedule(simpleSchedule()
.withIntervalInSeconds(1)
.repeatForever())
.build();
return trigger;
}
public static Trigger fireOnce20SecondsFromNow() {
SimpleTrigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("trigger2", "group")
.startAt(futureDate(20, SECOND))
.withSchedule(simpleSchedule())
.build();
return trigger;
}
}