java 两个日期之间的标准工作日(原创)

时间:2022-08-15 14:06:38
package control;


import java.text.ParseException;
import java.text.SimpleDateFormat;

import java.util.Date;
import java.util.Map;

import javax.servlet.jsp.jstl.sql.Result;

public class DateOper {
private String holidays;
private String workdays;
private DB_OPER db=new DB_OPER();
public DateOper()
{
Result result = null;
String sqlholiday = "select holidaydate from hrmpubholiday t where changetype=1";// 这个表手动维护,由国务院发布放假通知后添加
String sqlworkday = "select holidaydate from hrmpubholiday t where changetype=3";

result = db.executeQuery(sqlholiday);
// 得到今年和明年的所有的假日


if(result!=null && result.getRowCount()!=0)
{
for(int i=0;i<result.getRowCount();i++)
{
Map row = result.getRows()[i];

holidays += row.get("holidaydate").toString() + ",";

}
}
System.out.println(holidays);

// 得到今年和明年的所有的假日

result = db.executeQuery(sqlworkday);
if(result!=null && result.getRowCount()!=0)
{
for(int i=0;i<result.getRowCount();i++)
{
Map row = result.getRows()[i];

workdays += row.get("holidaydate").toString() + ",";

}
}
System.out.println(workdays);
}
public int countWorkDay(String start1, String end1)
{


String strsql;
// 工作日
int workDay = 0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date start=null;
Date end = null;

try {
start=(Date) sdf.parse(start1);
end = (Date) sdf.parse(end1);
} catch (ParseException e) {
System.out.println("非法的日期格式,无法进行转换");
e.printStackTrace();
}
//int thisyear = start.getYear() + 1900;
//int nextyear = thisyear == end.getYear() ? thisyear + 1 : end.getYear() + 1900;

System.out.println("start>>"+start+" end>>"+end);
int days = getDutyDays(start, end);
System.out.println("start>>"+start1+" end>>"+end1+" days>>"+days);
return days;
}



public int getDutyDays(Date StartDate,Date EndDate) {//得到非周六周日的工作日
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
StartDate.setDate(StartDate.getDate() + 1);
int result = 0;
while (StartDate.compareTo(EndDate) <= 0) {

if (StartDate.getDay() != 6 && StartDate.getDay() != 0)//周内
{
result++;
// System.out.println(holidays);
if(!holidays.isEmpty())
{
if(holidays.indexOf(sdf.format(StartDate))>-1)//不是节假日加1
result--;
}

}
else//周末
{ if(!workdays.isEmpty())
{
if(workdays.indexOf(sdf.format(StartDate))>-1)//工作日
result++;
}
}
//System.out.println(StartDate+"-------"+StartDate.getDay()+"-----"+result+"******"+holidays.indexOf(sdf.format(StartDate))+"******"+workdays.indexOf(sdf.format(StartDate)));
StartDate.setDate(StartDate.getDate() + 1);
}
return result;
}

public static void main(String[] args) throws Exception {


DateOper db=new DateOper();

int workDays=db.countWorkDay("2016-2-10","2016-2-26");
System.out.println("workdays="+workDays);

}
}