Java * 工作日计算
程序员文章站
2022-05-17 21:36:48
...
package com.jc.servlet;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class Test {
//计算工作日实际日期
@org.junit.Test
public void test() {
try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar ca = Calendar.getInstance();
Date d = df.parse("2016-12-8");
ca.setTime(d);//设置当前时间
initHolidayList("2014-11-06");//初始节假日
initHolidayList("2014-11-07");//初始节假日
initHolidayList("2014-11-03");//初始节假日
Calendar c = addDateByWorkDay(ca,3);
System.out.println(df.format(c.getTime()));
} catch ( Exception e) {
// TODO: handle exception
System.out.println(e.getClass());
e.printStackTrace();
}
}
@org.junit.Test
public void test2 () throws Exception{
String sdate = "2016-12-08";
String edate = "2016-12-13";
long day = getDaySub(sdate,edate);
System.out.println(day);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar ca = Calendar.getInstance();
Date d = df.parse(sdate);
ca.setTime(d);//设置当前时间
long gzr = endDay_startDay(ca,day);
System.out.println(gzr);
}
/**
* 两个日期相减
* @param beginDateStr
* @param endDateStr
* @return
*/
public static long getDaySub(String beginDateStr,String endDateStr){
long day=0;
SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
Date beginDate;
Date endDate;
try{
beginDate = format.parse(beginDateStr);
endDate= format.parse(endDateStr);
day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000);
//System.out.println("相隔的天数="+day);
} catch (ParseException e){
// TODO 自动生成 catch 块
e.printStackTrace();
}
return day+1;
}
/**
* 自定义节假日
*/
private static List<Calendar> holidayList = new ArrayList<Calendar>(); //节假日列表
/**
* 计算一个日期后的多少天有几个休息日,并用使用天数减去工作日获得实际工作日。
* @param calendar
* @param day
* @return
* @throws Exception
*/
public static long endDay_startDay(Calendar calendar,long day) throws Exception{
long result = 0;
for (int i=0; i<day; i++){
calendar.add(Calendar.DAY_OF_MONTH, 1);
if(checkHoliday(calendar)){
result++;
}
}
return day-result-1;
}
/**
*
* <p>Title: addDateByWorkDay </P>
* <p>Description: TODO 计算相加day天,并且排除节假日和周末后的日期</P>
* @param calendar 当前的日期
* @param day 相加天数
* @return
* return Calendar 返回类型 返回相加day天,并且排除节假日和周末后的日期
* throws
* date 2014-11-24 上午10:32:55
*/
public static Calendar addDateByWorkDay(Calendar calendar,int day){
try {
for (int i = 0; i < day; i++) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
if(checkHoliday(calendar)){
i--;
}
}
return calendar;
} catch (Exception e) {
e.printStackTrace();
}
return calendar;
}
/**
*
* @param calendar
* @param day
* @return
*/
public Calendar addDateDay(Calendar calendar,int day){
try {
for (int i = 0; i < day; i++) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
if(checkHoliday(calendar)){
i++;
}
}
return calendar;
} catch (Exception e) {
e.printStackTrace();
}
return calendar;
}
/**
*
* <p>Title: checkHoliday </P>
* <p>Description: TODO 验证日期是否是节假日</P>
* @param calendar 传入需要验证的日期
* @return
* return boolean 返回类型 返回true是节假日,返回false不是节假日
* throws
* date 2014-11-24 上午10:13:07
*/
public static boolean checkHoliday(Calendar calendar) throws Exception{
//判断日期是否是周六周日
if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY ||
calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){
return true;
}
//判断日期是否是节假日
for (Calendar ca : holidayList) {
if(ca.get(Calendar.MONTH) == calendar.get(Calendar.MONTH) &&
ca.get(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH)&&
ca.get(Calendar.YEAR) == calendar.get(Calendar.YEAR)){
return true;
}
}
return false;
}
/**
*
* <p>Title: initHolidayList </P>
* <p>Description: TODO 把所有节假日放入list</P>
* @param date 从数据库查 查出来的格式2014-05-09
* return void 返回类型
* throws
* date 2014-11-24 上午10:11:35
*/
public static void initHolidayList( String date){
String [] da = date.split("-");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, Integer.valueOf(da[0]));
calendar.set(Calendar.MONTH, Integer.valueOf(da[1])-1);//月份比正常小1,0代表一月
calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(da[2]));
holidayList.add(calendar);
}
/**
* 判断星期六与星期日
* @param bDate
* @param aDate
* @return
* @throws ParseException
*/
public boolean isSunAndSatur(String bDate) throws ParseException{
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
//String bDate = "2016-12-19";
//String aDate = "2016-12-30";
Date bdate = format1.parse(bDate);
Calendar cal = Calendar.getInstance();
cal.setTime(bdate);
if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY||cal.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
System.out.print("ok");
return true;
}else {
System.out.print("no");
return false;
}
}
}
上一篇: VBA编程解决工作的事情
下一篇: 学习vb语言