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;
}
// ********业务规则******//
}