需要的Jar 包
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.1</version>
</dependency>
从当前时间开始获取今天Cron剩余的执行时间的 集合 比如 cron表达式 每天 8 10 11 15 20 点执行 那么如果当前时间是 12点 那么只会获取到 15 20 点执行的时间
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.quartz.CronExpression;
public class CronDateUtil {
public static List<String> parser(String cronExpression) {
List<String> result = new ArrayList<String>();
if (cronExpression == null || cronExpression.length() < 1) {
return result;
} else {
CronExpression exp = null;
Calendar calendar = Calendar.getInstance();
String cronDate = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DATE);
String sStart = cronDate + " 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dStart = null;
Date dEnd = null;
try {
exp = new CronExpression(cronExpression);
dStart = sdf.parse(sStart);
calendar.setTime(dStart);
calendar.add(Calendar.DATE, 1);
dEnd = calendar.getTime();
} catch (ParseException e) {
e.printStackTrace();
return result;
}
Date dd = new Date();
dd = exp.getNextValidTimeAfter(dd);
while (dd.getTime() < dEnd.getTime()) {
result.add(sdf.format(dd));
dd = exp.getNextValidTimeAfter(dd);
}
exp = null;
}
return result;
}
public static void main(String[] args) {
String CRON_EXPRESSION = "0 15-30 13-13 ? * MON-FRI";
System.out.println(CRON_EXPRESSION);
List<String> lTime = new ArrayList<String>();
lTime = parser(CRON_EXPRESSION);
for (int i = 0; i < lTime.size(); i++) {
System.out.println(lTime.get(i));
}
}
}
获取今日 零点开始 到第二日零点 Cron表达式所执行操作的时间集合 单位: 年月日 没有时分秒 如有扩展自己增加
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.quartz.CronExpression;
public class CronDateUtil {
public static List<String> parser(String cronExpression) {
List<String> result = new ArrayList<String>();
if (cronExpression == null || cronExpression.length() < 1) {
return result;
} else {
CronExpression exp = null;
Calendar calendar = Calendar.getInstance();
String cronDate = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DATE);
String sStart = cronDate + " 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dStart = null;
Date dEnd = null;
try {
exp = new CronExpression(cronExpression);
dStart = sdf.parse(sStart);
calendar.setTime(dStart);
calendar.add(Calendar.DATE, 1);
dEnd = calendar.getTime();
} catch (ParseException e) {
e.printStackTrace();
return result;
}
Date dd = new Date();
dd = exp.getNextValidTimeAfter(dStart);
while (dd.getTime() < dEnd.getTime()) {
result.add(sdf.format(dd));
dd = exp.getNextValidTimeAfter(dd);
}
exp = null;
}
return result;
}
public static void main(String[] args) {
String CRON_EXPRESSION = "0 15-30 13-13 ? * MON-FRI";
System.out.println(CRON_EXPRESSION);
List<String> lTime = new ArrayList<String>();
lTime = parser(CRON_EXPRESSION);
for (int i = 0; i < lTime.size(); i++) {
System.out.println(lTime.get(i));
}
}
}
获取本月或者任意年月 的调度执行时间集合 (月度执行情况按日为单位划分) 如果 参数 year 和month 为空的情况下默认获取今年本月度 Cron表达式执行时间的集合 如果设定了 year 和month 参数 那将按照参数年月返回数据(返回结果集合为月度集合 月度集合里每个下标装有当天的所有集合)
package com.anole.common.utils;
import org.apache.commons.lang.StringUtils;
import org.quartz.CronExpression;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @author:manbu
* @data 2019/7/16- 11:57
* @TODO:
* @console:
*/
public class CronDateUtil {
/* 返回一个月的调度*/
public static List<List<String>> parserOneMonth(String cronExpression,Integer year,Integer month) {
List<String> result = new ArrayList<String>();
List<List<String>> listsForMonth = new ArrayList<>();
if (cronExpression == null || cronExpression.length() < 1) {
return listsForMonth;
} else {
CronExpression exp = null;
Calendar calendar = Calendar.getInstance();
if(year==null){
year = getYear();
}
if(month==null){
month = getMonth();
}
String cronDate = getFirstDayOfMonth1(year, month);
String sStart = cronDate + " 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dStart = null;
Date dEnd = null;
try {
exp = new CronExpression(cronExpression);
dStart = sdf.parse(sStart);
calendar.setTime(dStart);
calendar.add(Calendar.MONTH, 1);
dEnd = calendar.getTime();
} catch (ParseException e) {
e.printStackTrace();
return listsForMonth;
}
Date dd = new Date();
dd = exp.getNextValidTimeAfter(dStart);
Date newDate= dd;
while (dd.getTime() < dEnd.getTime()) {
SimpleDateFormat si = new SimpleDateFormat("yyyy-MM-dd");
if (si.format(newDate).equals(si.format(dd))) {
result.add(sdf.format(dd));
dd = exp.getNextValidTimeAfter(dd);
}else{
listsForMonth.add(result);
result=new ArrayList<String>();
result.add(sdf.format(dd));
dd = exp.getNextValidTimeAfter(dd);
newDate=dd;
}
}
exp = null;
}
return listsForMonth;
}
public static void main(String[] args) {
//String CRON_EXPRESSION = "0 15-30 13-13 ? * MON-FRI";
String CRON_EXPRESSION = "0 0 7,10,14,16,20 * * ?";
System.out.println(CRON_EXPRESSION);
List<List<String>> lists = parserOneMonth(CRON_EXPRESSION,null,8);
//lTime = parser(CRON_EXPRESSION);
for (int i = 0; i < lists.size(); i++) {
System.out.println(lists.get(i));
}
String firstDayOfMonth1 = getFirstDayOfMonth1(2019, 8);
String lastDayOfMonth1 = getLastDayOfMonth1(2019, 8);
Integer year = getYear();
Integer month = getMonth();
System.out.println(11);
}
/**
* 获取指定年月的第一天
* @author:manbu
* @param year
* @param month
* @return YYYY-MM-dd
*/
public static String getFirstDayOfMonth1(int year, int month) {
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR, year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最小天数
int firstDay = cal.getMinimum(Calendar.DATE);
//设置日历中月份的最小天数
cal.set(Calendar.DAY_OF_MONTH,firstDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date time = cal.getTime();
return sdf.format(cal.getTime());
}
/**
* 获取指定年月的最后一天
* @author:manbu
* @param year
* @param month
* @return YYYY-MM-dd
*/
public static String getLastDayOfMonth1(int year, int month) {
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR, year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DATE);
//设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(cal.getTime());
}
/**
* 获取今年年份
* @author:manbu
* @return Integer
*/
public static Integer getYear() {
Calendar date = Calendar.getInstance();
return date.get(Calendar.YEAR);
}
/**
* 获取当前月份
* @author:manbu
* @return Integer
*/
public static Integer getMonth() {
Calendar date = Calendar.getInstance();
return (date.get(Calendar.MONTH) + 1);
}
}
获取本月度Cron表达式执行操作的所有时间 不按天分割 全量返回当前月度数据
package com.anole.common.utils;
import org.apache.commons.lang.StringUtils;
import org.quartz.CronExpression;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @author:manbu
* @data 2019/7/16- 11:57
* @TODO:
* @console:
*/
public class CronDateUtil {
/* 返回一个月的调度*/
public static List<String> parserOneMonth(String cronExpression,Integer year,Integer month) {
List<String> result = new ArrayList<String>();
List<List<String>> listsForMonth = new ArrayList<>();
if (cronExpression == null || cronExpression.length() < 1) {
return result;
} else {
CronExpression exp = null;
Calendar calendar = Calendar.getInstance();
if(year==null){
year = getYear();
}
if(month==null){
month = getMonth();
}
String cronDate = getFirstDayOfMonth1(year, month);
String sStart = cronDate + " 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dStart = null;
Date dEnd = null;
try {
exp = new CronExpression(cronExpression);
dStart = sdf.parse(sStart);
calendar.setTime(dStart);
calendar.add(Calendar.MONTH, 1);
dEnd = calendar.getTime();
} catch (ParseException e) {
e.printStackTrace();
return result;
}
Date dd = new Date();
dd = exp.getNextValidTimeAfter(dStart);
Date newDate= dd;
while (dd.getTime() < dEnd.getTime()) {
result.add(sdf.format(dd));
dd = exp.getNextValidTimeAfter(dd);
}
exp = null;
}
return result;
}
public static void main(String[] args) {
//String CRON_EXPRESSION = "0 15-30 13-13 ? * MON-FRI";
String CRON_EXPRESSION = "0 0 7,10,14,16,20 * * ?";
System.out.println(CRON_EXPRESSION);
List<String> lists = parserOneMonth(CRON_EXPRESSION,null,8);
//lTime = parser(CRON_EXPRESSION);
for (int i = 0; i < lists.size(); i++) {
System.out.println(lists.get(i));
}
String firstDayOfMonth1 = getFirstDayOfMonth1(2019, 8);
String lastDayOfMonth1 = getLastDayOfMonth1(2019, 8);
Integer year = getYear();
Integer month = getMonth();
System.out.println(11);
}
/**
* 获取指定年月的第一天
* @author:manbu
* @param year
* @param month
* @return YYYY-MM-dd
*/
public static String getFirstDayOfMonth1(int year, int month) {
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR, year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最小天数
int firstDay = cal.getMinimum(Calendar.DATE);
//设置日历中月份的最小天数
cal.set(Calendar.DAY_OF_MONTH,firstDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date time = cal.getTime();
return sdf.format(cal.getTime());
}
/**
* 获取指定年月的最后一天
* @author:manbu
* @param year
* @param month
* @return YYYY-MM-dd
*/
public static String getLastDayOfMonth1(int year, int month) {
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR, year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DATE);
//设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(cal.getTime());
}
/**
* 获取今年年份
* @author:manbu
* @return Integer
*/
public static Integer getYear() {
Calendar date = Calendar.getInstance();
return date.get(Calendar.YEAR);
}
/**
* 获取当前月份
* @author:manbu
* @return Integer
*/
public static Integer getMonth() {
Calendar date = Calendar.getInstance();
return (date.get(Calendar.MONTH) + 1);
}
}
代码讲解