java Android 算一定業務規定的工作日(除去法定節假日、調休週末上班日)代碼copy直接用
package com.susan.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
* 計算 特定 規則的 工作日 (可以根據具體業務規則修改得到工作日)
*
* @author susan
*
*/
public class CalculateSpecificWorkDateUtil {
private static final String TAG = CalculateSpecificWorkDateUtil.class
.getName();
private static CalculateSpecificWorkDateUtil cswdu = null;
private CalculateSpecificWorkDateUtil() {
}
public static CalculateSpecificWorkDateUtil getInstance() {
if (cswdu == null) {
cswdu = new CalculateSpecificWorkDateUtil();
}
return cswdu;
}
/**
* @title 獲取週六和週日是工作日的情況(手工維護)
* 注意,日期必須寫全:
* 2015-1-4必須寫成:2015-01-04
* @author
* @return 週末是工作日的列表
*/
private List<String> getWeekendIsWorkDateList(){
List<String> list = new ArrayList<String>();
list.add("2015-09-06");
list.add("2015-10-10");
return list;
}
/**
* @title 獲取週一到週五是假期的情況(手工維護)
* 注意,日期必須寫全:
* 2009-1-4必須寫成:2009-01-04
* @author
* @return 平時是假期的列表
*/
private List<String> getWeekdayIsHolidayList(){
List<String> list = new ArrayList<String>();
list.add("2015-09-03");
list.add("2015-09-04");
list.add("2015-10-01");
list.add("2015-10-02");
list.add("2015-10-05");
list.add("2015-10-06");
list.add("2015-10-07");
list.add("2016-01-01");
return list;
}
/**
* @title 判斷是否爲工作日
* @detail 工作日計算:
* 1、正常工作日,並且爲非假期
* 2、週末被調整成工作日
* @author
* @param date 日期
* @return 是工作日返回true,非工作日返回false
*/
public boolean isWorkDay(Calendar calendar){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY
&& calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY){
//平時
return !getWeekdayIsHolidayList().contains(sdf.format(calendar.getTime()));
}else{
//週末
return getWeekendIsWorkDateList().contains(sdf.format(calendar.getTime()));
}
}
////////////////////////////********業務規則******//////////////////////////////////////////
//業務規則 獲得第二個 工作日
public String getSpecWorkDate(String strDate){
String workDay = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = null;
try {
d = sdf.parse(strDate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(d);
//傳進來的日期 往後加一天
cal.add(Calendar.DAY_OF_YEAR, 1);
int workDayFlag = 0;
for (int i = 0; i < 15; i++) {
if (isWorkDay(cal) && workDayFlag<2) {
Date time = cal.getTime();
if (workDayFlag == 1) {
workDay = sdf.format(time);
//System.out.println("輸出第二個工作日:" + workDay);
break;
}
workDayFlag++;
}
cal.add(Calendar.DAY_OF_YEAR, 1);
}
return workDay;
}
// ////////////////////////////********業務規則******//////////////////////////////////////////
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
* 計算 特定 規則的 工作日 (可以根據具體業務規則修改得到工作日)
*
* @author susan
*
*/
public class CalculateSpecificWorkDateUtil {
private static final String TAG = CalculateSpecificWorkDateUtil.class
.getName();
private static CalculateSpecificWorkDateUtil cswdu = null;
private CalculateSpecificWorkDateUtil() {
}
public static CalculateSpecificWorkDateUtil getInstance() {
if (cswdu == null) {
cswdu = new CalculateSpecificWorkDateUtil();
}
return cswdu;
}
/**
* @title 獲取週六和週日是工作日的情況(手工維護)
* 注意,日期必須寫全:
* 2015-1-4必須寫成:2015-01-04
* @author
* @return 週末是工作日的列表
*/
private List<String> getWeekendIsWorkDateList(){
List<String> list = new ArrayList<String>();
list.add("2015-09-06");
list.add("2015-10-10");
return list;
}
/**
* @title 獲取週一到週五是假期的情況(手工維護)
* 注意,日期必須寫全:
* 2009-1-4必須寫成:2009-01-04
* @author
* @return 平時是假期的列表
*/
private List<String> getWeekdayIsHolidayList(){
List<String> list = new ArrayList<String>();
list.add("2015-09-03");
list.add("2015-09-04");
list.add("2015-10-01");
list.add("2015-10-02");
list.add("2015-10-05");
list.add("2015-10-06");
list.add("2015-10-07");
list.add("2016-01-01");
return list;
}
/**
* @title 判斷是否爲工作日
* @detail 工作日計算:
* 1、正常工作日,並且爲非假期
* 2、週末被調整成工作日
* @author
* @param date 日期
* @return 是工作日返回true,非工作日返回false
*/
public boolean isWorkDay(Calendar calendar){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY
&& calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY){
//平時
return !getWeekdayIsHolidayList().contains(sdf.format(calendar.getTime()));
}else{
//週末
return getWeekendIsWorkDateList().contains(sdf.format(calendar.getTime()));
}
}
////////////////////////////********業務規則******//////////////////////////////////////////
//業務規則 獲得第二個 工作日
public String getSpecWorkDate(String strDate){
String workDay = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = null;
try {
d = sdf.parse(strDate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(d);
//傳進來的日期 往後加一天
cal.add(Calendar.DAY_OF_YEAR, 1);
int workDayFlag = 0;
for (int i = 0; i < 15; i++) {
if (isWorkDay(cal) && workDayFlag<2) {
Date time = cal.getTime();
if (workDayFlag == 1) {
workDay = sdf.format(time);
//System.out.println("輸出第二個工作日:" + workDay);
break;
}
workDayFlag++;
}
cal.add(Calendar.DAY_OF_YEAR, 1);
}
return workDay;
}
// ////////////////////////////********業務規則******//////////////////////////////////////////
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.