今天准备写数据库备份定时任务,但是发现很多都是直接填写时间表达式子的,那么对于不懂时间表达式的,就比较麻烦,所以要是只传时间就能转换成cron表达式就美滋滋了,所以它来了。
/**
* @author Lxq
* @version 1.0
* @date 2020/9/11 9:48
* java日期转cron表达式工具类
*/
public class CronUtils {
/**
* 每年时间format格式
*/
private static final String DATEFORMAT_YEAR = "ss mm HH dd MM ? yyyy";
/**
* 每天时间format格式
*/
private static final String DATEFORMAT_EVERYDAY = "ss mm HH * * ?";
/**
* 每周时间format格式
*/
private static final String DATEFORMAT_SUN = "ss mm HH ? * 1";
private static final String DATEFORMAT_MON = "ss mm HH ? * 2";
private static final String DATEFORMAT_TUE = "ss mm HH ? * 3";
private static final String DATEFORMAT_WED = "ss mm HH ? * 4";
private static final String DATEFORMAT_THU = "ss mm HH ? * 5";
private static final String DATEFORMAT_FRI = "ss mm HH ? * 6";
private static final String DATEFORMAT_SAT = "ss mm HH ? * 7";
/***
*
* @param date
* @param dateFormat : e.g:yyyy-MM-dd HH:mm:ss
* @return
*/
public static String formatDateByPattern(Date date, String dateFormat) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
String formatTimeStr = null;
if (date != null) {
formatTimeStr = sdf.format(date);
}
return formatTimeStr;
}
/**
* 时间转换时间表达式
* convert Date to cron ,eg. "0 06 10 15 1 ? 2020"
*
* @param date : 时间点
* @param dateFormat
* @return
*/
public static String getCron(Date date, String dateFormat) {
return formatDateByPattern(date, dateFormat);
}
/**
* 时间字符串转换时间表达式
*
* @param date HH:mm:ss
* @param dateFormat
* @return
*/
public static String getCron(String date, String dateFormat) {
Date parse = DateUtil.parse(date, "HH:mm:ss");
return formatDateByPattern(parse, dateFormat);
}
/**
* 时间字符串转时间表达式(年)
*
* @param date
* @param dateFormat
* @return
*/
public static String getCronByYear(String date, String dateFormat) {
Date parse = DateUtil.parse(date, "yyyy-MM-dd HH:mm:ss");
return formatDateByPattern(parse, dateFormat);
}
public static void main(String[] args) {
String cron = getCron(new Date(), DATEFORMAT_TUE);
System.out.println(cron);
String cron1 = getCron(new Date(), DATEFORMAT_EVERYDAY);
System.out.println(cron1);
String cron2 = getCron(new Date(), DATEFORMAT_YEAR);
System.out.println(cron2);
String cron4 = getCron("12:12:12", DATEFORMAT_EVERYDAY);
System.out.println(cron4);
String cron5 = getCronByYear("2020-9-11 12:12:12", DATEFORMAT_YEAR);
System.out.println(cron5);
}
}
31 19 11 ? * 3
31 19 11 * * ?
31 19 11 11 09 ? 2020
12 12 12 * * ?
12 12 12 11 09 ? 2020