欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java,

来源: javaer 分享于  点击 17098 次 点评:135

java,


编写一个计算20个工作日的代码,但是要算剩余天数,如果超过了设置的天数则一直是-10天 有没有大神可以指点下 代码如下~
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;

public class WeekDays {

//用来保存所有法定假日
public static String[] statutoryHoliday = {"20160101", "20160501", "20161001", "20161002", "20161003", "20160815", "20161224"};

public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

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

List<String> holidays = getHolidaysAndWeekends();
// for(String e:holidays) System.out.println(e);
//这里获取异议提交的时间
String day ="20160228";

//获取20个工作日并输出
String[] twentyDay = getTwentyDayAfter(day, holidays);
Date day1 = sdf.parse(twentyDay[19]);
for(String eachDay: twentyDay){
System.out.println(eachDay);
}

//输出提交的起始时间截止时间以及剩余时间
System.out.println("异议提交时间为: " + day + " 20个工作日的截止时间为"+twentyDay[19]);
System.out.println("截止时间的日历格式 "+day1);

int restDay = getRestDay(day,holidays,twentyDay);
System.out.println("异议提交时间为: " + day +" 当前剩余工作时间: "+restDay);

}


//获取剩余的工作时间
private static int getRestDay(String day,List<String> holiday, String[] twentyDay){
int index = 0;
// Date now = new Date();
// String nowDay = sdf.format(now);
//这里为当前时间,此时是测试
String nowDay = "20160330";

Calendar cal = Calendar.getInstance();
//首选判断今天是不是节假日,如果不是则把日期变成上周五,
//但是如果此时问题是周末提交,则index会循环为20 ,剩余时间为0,实际上应该是剩余20天
//因此要判断index值 如果为20则还需判断是否与最后的日期一致
//还需判断逾期天数 通过前面的设置
boolean flag = WeekDays.validate(nowDay,holiday);;
while(flag){
try {
cal.setTime(sdf.parse(nowDay));
} catch (ParseException e) {
e.printStackTrace();
}
cal.set(Calendar.DATE,cal.get(Calendar.DATE) - 1);
nowDay = sdf.format(cal.getTime());
flag = WeekDays.validate(nowDay,holiday);
}

if(!flag) {
if(nowDay.equals(day)) {
index=0; } else {
for(String eachDay: twentyDay) {
index++;
if(nowDay.equals(eachDay)){
break;
}
}
}
}

if(index == 20 ) {
if(nowDay.equals(twentyDay[19])){
return 0;
}else{
return index;}
}else{
return 20-index++;}

}


private static List<String> getHolidaysAndWeekends() {
List<String> weekenDays = getWeekends(2016);//拿到年度所有周末
addStatutoryHolidays(weekenDays);//增加法定假日

return weekenDays;
}

//返回20个工作日后的那一天
private static String[] getTwentyDayAfter(String theDay, List<String> weekenDays) throws ParseException {
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(theDay));

// System.out.println("here"+sdf.format(cal.getTime()));
String[] twoDaysAhead = new String[30];

int count = 0;
while(count < 30){
//这里1这是往后加 -1则是往前推
cal.add(Calendar.DATE, 1);
boolean isHoliday = validate(sdf.format(cal.getTime()), weekenDays);
// System.out.println(isHoliday);
if(!isHoliday){
twoDaysAhead[count++] = sdf.format(cal.getTime());
}
}
return twoDaysAhead;
}

private static boolean validate(String string, List<String> holidays) {
String mmdd = string.substring(4);

for(String holiday: holidays){
if(mmdd.equals(holiday.substring(4))){
return true;
}
}

return false;
}

private static void addStatutoryHolidays(List<String> weekenDays) {
for(String holiday: statutoryHoliday){
weekenDays.add(holiday);
}
}

public static List<String> getWeekends(int year){
List<String> list = new ArrayList<String>();
final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

Calendar cal = Calendar.getInstance(Locale.CHINA);
cal.set(year, 0, 1);

for(int day = 1; day <= cal.getActualMaximum(Calendar.DAY_OF_YEAR); day++){
cal.set(Calendar.DAY_OF_YEAR, day);

int weekDay = cal.get(Calendar.DAY_OF_WEEK);
if(weekDay == Calendar.SATURDAY || weekDay == Calendar.SUNDAY){
list.add(sdf.format(cal.getTime()));
}
}


return list;
}
}

相关文章

    暂无相关文章
相关栏目:

用户点评