近日有个需求,要求某项定时任务在每个月的最后一个工作日执行(仅考虑周末的情况),但是没有好的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; } }
问题解决。