У меня есть вопрос в Кварце, и вот сценарий, я хочу исключить время, скажем, сегодня начинается в 14:00 и заканчивается послезавтра в 13:00 - PullRequest
0 голосов
/ 15 апреля 2020

Кварцевая проблема
Что я хочу: я хочу исключить время, скажем, сегодня начинается в 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...