定时任务,Calendar日历类,实现指定日期区间的报送需求

需求

今天项目遇到了一个报送需求。一些非季度报送就用定时任务设置于每个月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号凌晨413分执行定时任务
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-28

2.输入2022-01-08

遍历集合为

2021-12-28

2022-01-08

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厌世小晨宇yu.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值