java获取大小周优化

之前写的获取大小周会因为月份的变化数据会错乱,比如当前月份的1号并不是星期一,而是随意的星期

目前代码能够实现的功能用户随意输入时间会根据当前时间判定是星期几,在动态改变获取大小周的参数

还是老样子根据用户输入的时间生成日历 你们要用直接把start,和end的参数换成你们自己的

// 返回的日期集合,生成日期
            List days = new ArrayList<>();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            try {
                Date start = dateFormat.parse(hwqCheckGroup.getStartTime());
                Date end = dateFormat.parse(hwqCheckGroup.getEndTime());

                Calendar tempStart = Calendar.getInstance();
                tempStart.setTime(start);

                Calendar tempEnd = Calendar.getInstance();
                tempEnd.setTime(end);
                tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
                while (tempStart.before(tempEnd)) {
                    days.add(dateFormat.format(tempStart.getTime()));
                    tempStart.add(Calendar.DAY_OF_YEAR, 1);
                }
            } catch (ParseException e) {
                e.printStackTrace();
            }

然后把数据插入到自己的业务表中

这段代码提供思路参考

 //给分组下每个人生成日期
            List<HwqCheckUser> hwqCheckUsers= hwqCheckUserMapper.getByGroupCode(hwqCheckGroup.getId());
            //先删除之前的数据
            hwqCheckCalendarMapper.deleteWeek(days,hwqCheckUsers);
            //生成的新日历写进数据库
            hwqCheckCalendarMapper.insertWeek(days,hwqCheckUsers);

对应的mybatis 批量删除数据

 批量插入数据 List爆红不用管

 计算大小周

q决定了获取日期集合里的参数位置

//第一周为大周时
if (hwqCheckGroup.getFirst().equals("2")){
                //bigSize默认设为5就行
                int q=bigsize;
                try {
                    Date parse = formatter.parse((String) days.get(0));
                     //判断当前是星期几
                    int date = parse.getDay();
                    switch(date){
                        case 2 :
                            q =4;
                            break;
                        case 3 :
                            q = 3;
                            break;
                        case 4 :
                            q = 2;
                            break;
                        case 5 :
                            q =1;
                            break;
                        case 6 :
                            q = 0;
                            break;
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                weekTime = new ArrayList<>();

                for (int i=1;i<=7-bigsize;i++){
                    weekTime.add(days.get(q+(i-1)));
                }
          
                for (int i=0;i<=q;i++){
                    for ( q=q+8;q<=q+8;){
                        //获取小周
                        if (q>=days.size()){
                            break;
                        }
                        for (int j=0;j<7-(bigsize+1);j++){
                            if ((q-1+j)>=days.size()){
                                break;
                            }
                            weekTime.add(days.get(q+j));
                        }
                        
                        for ( q=q+6;q<=q+6;){
                            //获取大周
                            if (q>=days.size()){
                                break;
                            }
                            for (int f=0;f<7-bigsize;f++){
                                if ((q-1+f)>=days.size()){
                                    break;
                                }
                                weekTime.add(days.get(q+f));
                            }

                        }
                        break;
                    }
                    if (q>=days.size()){
                        break;
                    }
                }
            }

第一周为小周时

//计算大小周的休息日期 第一周为小周时
               weekTime = new ArrayList<>();
               //动态获取周参数
                int m=smallSize;
                try {
                    Date parse = formatter.parse((String) days.get(0));
                    int date = parse.getDay();
                    switch(date){
                        case 2 :
                            m =4;
                            break;
                        case 3 :
                            m = 3;
                            break;
                        case 4 :
                            m = 2;
                            break;
                        case 5 :
                            m =1;
                            break;
                        case 6 :
                            m = 0;
                            break;
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                for (int i=1;i<=7-smallSize;i++){
                    weekTime.add(days.get(m+i));
                }
                for (int i=0;i<=m;i++){
                    for ( m=m+6;m<=m+6;){
                        //获取大周
                        if (m>=days.size()){
                            break;
                        }
                        for (int j=1;j<=7-(smallSize-1);j++){
                            if (m+j>=days.size()){
                                break;
                            }
                            weekTime.add(days.get(m+j));
                        }
                        for ( m=m+8;m<=m+8;){
                            //获取小周
                            if (m>=days.size()){
                                break;
                            }
                            for (int f=1;f<=7-smallSize;f++){
                                if (m+f>=days.size()){
                                    break;
                                }
                                weekTime.add(days.get(m+f));
                            }
                           
                        }
                        break;
                    }
                    if (m>=days.size()){
                        break;
                    }
                }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值