資源簡介
JAVA時間工具類(計算法定工作日工時):計算某個日期加上幾個工作日后的一個工作日期(除周末和法定節假日),計算某個日期后一天的工作日期(除周末和法定節假日),計算兩個日期的真實工作日(除周末和法定節假日),判斷一個日期是否是夏季時間,計算兩個時間差(小時),生成一個上下班時間,因為夏季冬季不一樣,一個日歷是不是法定節假日,一個日歷是不是法定要工作的周末,計算下一個流程開始時間=結束時間+1hour 如果不再工作時間內則從第二天早上開始。計算某月第一個工作日,計算某月最后一個工作日。

代碼片段和文件信息
package?cn.ffcs.demand.util;
import?java.text.DecimalFormat;
import?java.text.ParseException;
import?java.text.SimpleDateFormat;
import?java.util.ArrayList;
import?java.util.Calendar;
import?java.util.Date;
import?java.util.GregorianCalendar;
import?java.util.List;
import?java.util.ResourceBundle;
import?org.apache.commons.lang3.ArrayUtils;
import?org.apache.commons.lang3.time.DateUtils;
/**
?*?本類是一個工作日計算類
?*?本類負責:1計算某個時間點加上相應的工作日后就會生成一個非假期的工作日期
?*???????2計算兩個日期的具體工作日
?*???????3計算工作的小時數(排除雙休節假日,涵蓋了周末上班情況)
?*?@author???劉強
?*?@version??Ver?1.0?2018-06-29?改訂??
?*
?*/
public?class?WorkDayPlus?{
/**
?*?此方法計算某個日期加上幾個工作日后的一個工作日期(除周末)
?*?@param? date(起始日期)??day(要添加的工作天數)
?*?@return incomeDate(去除周末后的日期)
?*/
public?Date?getIncomeDate(Date?dateint?days)?throws?NullPointerException{
????Date?incomeDate?=?date;
????for(int?i?=?1?;?i?<=?days?;?i++){
???? incomeDate?=?getIncomeDate(incomeDate);
????}
????return?incomeDate;
}
/**
?*?此方法計算某個日期加上幾個工作日后的一個工作日期(除周末和法定節假日)
?*?@param? date(起始日期)??day(要添加的工作天數)
?*?@return incomeDate(去除周末后的日期)
?*/
public?Date?getIncomeDatePlus(Date?dateint?days)?throws?NullPointerException{
????Date?incomeDate?=?date;
????for(int?i?=?1?;?i?<=?days?;?i++){
???? incomeDate?=?getIncomeDatePlus(incomeDate);
????}
????return?incomeDate;
}
/**
?*?此方法計算某個日期后一天的工作日期(除周末)
?*?@param? date(起始日期)
?*?@return incomeDate(去除周末后的日期)
?*/
private?Date?getIncomeDate(Date?date)?throws?NullPointerException{
????if?(null?==?date){
????????throw?new?NullPointerException(“the?date?is?null?or?empty!“);
????}
?
????//對日期的操作我們需要使用?Calendar?對象
????Calendar?calendar?=?new?GregorianCalendar();
????calendar.setTime(date);
?
????//+1天
????calendar.add(Calendar.DAY_OF_MONTH?+1);
?
????//判斷是星期幾
????int?dayOfWeek?=?calendar.get(Calendar.DAY_OF_WEEK);
?
????Date?incomeDate?=?calendar.getTime();
????if?(dayOfWeek?==?1?||?dayOfWeek?==?7){
????????//遞歸
????????return?getIncomeDate(incomeDate);
????}
????return?incomeDate;
}
/**
?*?此方法計算某個日期后一天的工作日期(除周末和法定節假日)
?*?@param? date(起始日期)
?*?@return incomeDate(去除周末后的日期)
?*/
public?Date?getIncomeDatePlus(Date?date)?throws?NullPointerException{
????if?(null?==?date){
????????throw?new?NullPointerException(“the?date?is?null?or?empty!“);
????}
?
????//對日期的操作我們需要使用?Calendar?對象
????Calendar?calendar?=?new?GregorianCalendar();
????calendar.setTime(date);
?
????//+1天
????calendar.add(Calendar.DAY_OF_MONTH?+1);
?
????Date?incomeDate?=?calendar.getTime();
?
????if?(isWeekend(calendar)?||?isHoliday(calendar)){
????????//遞歸
????????return?getIncomeDatePlus(incomeDate);
????}
????return?incomeDate;
}
/**
?*?此方法計算兩個日期的真實工作日(除周末和法定節假日)
?*?@param? startTime(起始日期)endTime(結束時間)
?*?@return workdays(去除周末和法定節假日后的日期)
?*/
public?int?getWorkDays(Date?startTimeDate?endTime){
return?getDatesBetweenTwoDate(startTimeendTime).size();
}
/**
?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-08-08?08:52??時間工具\
?????文件???????18845??2018-08-05?16:43??時間工具\WorkDayPlus.java
?????文件?????????443??2018-07-27?15:59??時間工具\WorkDayPlusConfig.properties
評論
共有 條評論