需求
今天项目遇到了一个报送需求。一些非季度报送就用定时任务设置于每个月8号,18号,28号报送指定区间内新增的信息。例如,
1.定时任务调用时的当前日期是2022-01-08,就需要报送2021-12-28 ~2022-01-08区间内新增的信息。
2.定时任务调用时的当前日期是2022-01-18,就需要报送2022-01-08 ~2022-01-18区间内新增的信息。
3.定时任务调用时的当前日期是2022-01-28,就需要报送2022-01-18 ~2022-01-28区间内新增的信息。
我使用了Calendar类进行日期的计算,把区间计算结果开始时间,结束时间最后存入了一个list。具体的测试代码如下:
代码实现
ps:推荐定时任务cron表达式生成器:cron表达式生成器
下面的表达式就是每个月8号,18号,28号凌晨4点13分执行定时任务
0 13 4 8,18,28 * ?
/**
* Create with IntelliT IDEA
*
* @Author: zhengmingzhe
* @Date: 2022/11/03/20:48
* @Description: 定时任务每月8号,18号,28号那天报送调用下面的方法获取8号,18号,28号的区间 比如上个月28号到这个月8号,这个月8号到18号,18号到28号(用于报送需求)
*/
public class DateSection {
public static void main(String[] args) {
getMonthFullDay();
}
/**
* 获取指定的日期区间
*
* @param
* @return
*/
public static List<String> getMonthFullDay() {
List<String> dateSection = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//格式化日期
// String currntDate = sdf.format(new Date());
//下面定时任务的日期替代 ,定时任务的日期是每个月的8号,18号,28号
String currentDate = "2022-01-08";
int year = Integer.parseInt(currentDate.substring(0, 4));
int month = Integer.parseInt(currentDate.substring(5, 7));
int currentDay = Integer.parseInt(currentDate.substring(8, 10));
Calendar cal = Calendar.getInstance();// 获得当前日期对象
cal.clear();// 清除信息
if (currentDay == 8) {
int day = 28;// 所有月份从1号开始,这里可以设置上个月指定的日期
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 2);// 1月从0开始
cal.set(Calendar.DAY_OF_MONTH, day);
//拿到上个月28号,存入list
String startDate = sdf.format(cal.getTime());
dateSection.add(startDate);
dateSection.add(currentDate);
dateSection.stream().forEach(n -> System.out.println(n));
return dateSection;
} else {
int day = Integer.parseInt(currentDate.substring(8, 10));
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1);// 1月从0开始
cal.set(Calendar.DAY_OF_MONTH, day);
cal.add(Calendar.DAY_OF_MONTH, -10);
String startDate = sdf.format(cal.getTime());
dateSection.add(startDate);
dateSection.add(currentDate);
dateSection.stream().forEach(n -> System.out.println(n));
return dateSection;
}
}
}
测试结果
1.输入2022-03-28
遍历集合为
2022-03-18
2022-03-282.输入2022-01-08
遍历集合为
2021-12-28
2022-01-08