Quartz之AnnualCalendar

问题1 我想排除一年中的某一天,怎么办呢! 
Quartz:使用AnnualCalendar进行相应的设置 
参考资料 
1 Quartz入门简介三 
http://wwwzchen.iteye.com/blog/846099 
2 quartz 学习笔记 
http://chinaxxren.iteye.com/blog/897989 
Quartz的BaseCalendar层次结构如下: 
 
在本例中主要用到了AnnualCalendar,它的作用是排除排除每一年中指定的一天或多天. 
AnnualCalendar类说明如下: 
Java代码    收藏代码
  1. This implementation of the Calendar excludes a set of days of the year. You may use it to exclude bank holidays which are on the same date every year.   

其它相应的有:CronCalendar(表达式),DailyCalendar(指定的时间范围内的每一天),HolidayCalendar(排除节假日),MonthlyCalendar(排除月份中的数天),WeeklyCalendar(排除星期中的一天或多天) 
具体代码如下: 
Java代码    收藏代码
  1. //法定节日是以每年为周期的,所以使用AnnualCalendar    
  2.        AnnualCalendar holidays = new AnnualCalendar();          
  3.        // ②五一劳动节    
  4.        Calendar laborDay = new GregorianCalendar();    
  5.        laborDay.add(Calendar.MONTH, 5);    
  6.        laborDay.add(Calendar.DATE, 1);    
  7.        // ②-1:排除的日期,如果设置为false则为包含    
  8.        holidays.setDayExcluded(laborDay, true);    
  9.        // ③国庆节    
  10.        Calendar nationalDay = new GregorianCalendar();    
  11.        nationalDay.add(Calendar.MONTH, 10);    
  12.        nationalDay.add(Calendar.DATE, 1);    
  13.        // ③-1:排除该日期    
  14.        holidays.setDayExcluded(nationalDay, true);            
  15.        //添加到时间集合到任务调度器中  
  16.        sched.addCalendar("holidays", holidays, false,false);             
  17.        //当前时间15秒后运行  
  18.        Date startTime = nextGivenSecondDate(null15);  
  19.        //绑定任务  
  20.        JobDetail job = newJob(SimpleJob.class)  
  21.            .withIdentity("job1""group1")  
  22.            .build();          
  23.        //触发器  
  24.        SimpleTrigger trigger = newTrigger()   
  25.            .withIdentity("trigger1""group1")  
  26.            .startAt(startTime)  
  27.            .withSchedule(simpleSchedule()  
  28.                    .withIntervalInHours(1)//重复间隔:小时为单位  
  29.                    .repeatForever())  
  30.            .modifiedByCalendar("holidays")  
  31.            .build();          
  32.         
  33.        //运行时间  
  34.        Date firstRunTime = sched.scheduleJob(job, trigger);         
  35.        log.error(job.getKey() +  
  36.                " will run at: " + firstRunTime +    
  37.                " and repeat: " + trigger.getRepeatCount() +   
  38.                " times, every " + trigger.getRepeatInterval() / 1000 + " seconds");          
  39.        
  40.        //启动调度器  
  41.        sched.start();  

猜你喜欢

转载自zxb1985.iteye.com/blog/1841410