cron表达式 每个月的最后一个工作日的另一种解法

近日有个需求,要求某项定时任务在每个月的最后一个工作日执行(仅考虑周末的情况),但是没有好的cron表达式写法,最后在stackoverflow找到了思路

cron每天执行一次,然后在执行定时任务的方法加个判断

public static boolean checkLastWorkDay() {
Calendar cal1 = Calendar.getInstance();
int month = cal1.get(Calendar.MONTH) + 1;
int year = cal1.get(Calendar.YEAR);
int day = cal1.get(Calendar.DATE);
LOG.warn(year + "年" + month + "月" + day + "日");
int week = 0;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1);
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 获取该月最大一天
cal.set(Calendar.DAY_OF_MONTH, lastDay);
week = cal.get(Calendar.DAY_OF_WEEK) - 1 == 0 ? 7 : cal.get(Calendar.DAY_OF_WEEK) - 1;// 获得最后一天是星期几
if (week == 7) {
lastDay = lastDay - 2;
} else if (week == 6) {
lastDay = lastDay - 1;
}
if (day == lastDay) {
LOG.warn("今天是本月的最后一个工作日");
return true;
} else {
LOG.warn("今天不是是本月的最后一个工作日");
return false;
}
}

问题解决。

发表评论

邮箱地址不会被公开。 必填项已用*标注