求各位大神帮我看看哪里错了!!
我想求某一个月的工作日,上面xiuxi定义了法定假日,如果法定假日是周六或者是周日的话,工作日是不会变的,月份如果输入‘0’的话会默认显示一年所有是数据。
package com.ldwork.info;
import java.util.Calendar;
import java.util.*;
public class CalendarUtil {
public static void main(String[] args) {
String xiuxi[]={"2020-04-29","2020-05-02","2020-04-19"};
Map<String,Integer> aa=getWorkDays(2020,4,xiuxi);
// for (int i = 1 ; i<13 ;++i){
// System.err.println("------------" + aa.get("year"+i) + "年" + aa.get("month"+i) + "月-------------");
// System.err.println("总天数:" + aa.get("daysAmount"+i));
// }
System.err.println("------------" + aa.get("year4") + "年" + aa.get("month4") + "月-------------");
System.err.println("总天数:" + aa.get("daysAmount4"));
System.err.println("工作日天数:" + aa.get("workDaysAmount4"));
System.err.println("除周末外的法定假日:"+aa.get("holiDays4"));
}
/**
* 提供年份或者月份和提供年份的法定假日
* 可以计算出当年/当月的工作日数
*/
public static Map getWorkDays(int year , int month , String holiday[]) {
//定义数据容器
Map<Object, Integer> map = new HashMap<>();
//定义工作日天数
int workDays = 0;
//定义法定假日天数
int holiDays = 0;
//定义临时数组
String item[]={};
//定义日历
Calendar calendar=Calendar.getInstance();
//如果没有传进月份参数,默认为传入年份一年的数据
if (month==0){
//循环遍历一年的数据
for (int i = 0;i<12;++i){
calendar.set(year,i,1);
//获取当月总天数
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
//循环遍历当前月除周末的法定假日天数
for (int k = 0 ; k<holiday.length;++k){
item=holiday[k].split("-");
int day=0;
if (calendar.get(Calendar.MONTH)+1==Integer.valueOf(item[1])){
//calendar.set(Calendar.DATE,Integer.valueOf(item[2]));
day = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println(day);
if (!(day==Calendar.SUNDAY||day==Calendar.SATURDAY)){
holiDays++;
}
}
System.out.println(day);
}
//循环遍历除周末外的天数
for (int j = 0; j < days; ++j) {
int day = calendar.get(Calendar.DAY_OF_WEEK);
if (!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)) {
workDays++;
}
calendar.add(Calendar.DATE, 1);
}
map.put("workDaysAmount"+(i+1), workDays-holiDays);//工作日
map.put("year"+(i+1), year);//实时年份
map.put("month"+(i+1), calendar.get(Calendar.MONTH));//实时月份
if(calendar.get(Calendar.MONTH)==0){
map.put("month"+(i+1), 12);//实时月份
}
map.put("daysAmount"+(i+1), days);//自然日
map.put("weeksAmount"+(i+1), calendar.getActualMaximum(Calendar.WEEK_OF_MONTH));//周
map.put("xiuxi"+(i+1),holiDays);//除周末外的法定假日
}
return map;
}else {
//设置日历为参数的时间
calendar.set(year,month-1,1);
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
//循环遍历当前月除周末的法定假日天数
for (int k = 0 ; k<holiday.length;++k){
String item1[]=holiday[k].split("-");
//如果当前月份等于法定假日的月份
if (month==Integer.valueOf(item1[1])) {
//循环遍历当月全部天数
for (int f = 0; f < days; ++f) {
//System.out.println(Integer.valueOf(item[2]));
//当法定假日等于此日
int day = calendar.get(Calendar.DAY_OF_WEEK);
if (Integer.valueOf(item1[2])==(f-1)) {
//排除法定假日是周末的情况
System.out.println(Integer.valueOf(item1[2]));
if (!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)) {
holiDays++;
}
}
calendar.add(Calendar.DATE, 1);
}
}
}
//循环遍历除周末外的天数
for (int j = 0; j < days; ++j) {
int day = calendar.get(Calendar.DAY_OF_WEEK);
if (!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)) {
workDays++;
}
calendar.add(Calendar.DATE, 1);
}
map.put("workDaysAmount"+month, (workDays-holiDays));//工作日
map.put("year"+month, year);//实时年份
map.put("month"+month, month);//实时月份
if (calendar.get(Calendar.MONTH)==0){
map.put("month"+month, 12);//实时月份
}
map.put("daysAmount"+month, days);//自然日
map.put("weeksAmount"+month, calendar.getActualMaximum(Calendar.WEEK_OF_MONTH));//周
map.put("holiDays"+month,holiDays);//除周末外的法定假日
return map;
}
}
}
我输入2020年4月份的话,法定假日没错,但是工作日怎么改都是不对。求大神指点!!
------------2020年4月-------------
总天数:30
工作日天数:20
除周末外的法定假日:1