之前写的获取大小周会因为月份的变化数据会错乱,比如当前月份的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;
}
}