packagetest;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Calendar;importjava.util.Date;importjava.util.GregorianCalendar;importjava.util.List;importjava.util.Scanner;public classDateToDate {/***************************************************************************
* 在beginDate和endDate之间所包含假期的天数,若不包含则返回0; 假期和周末分别进行单独考虑!
*
*@paramlist
*@parambeginDate
*@paramendDate
*@return
*/
public static intgetContainVacation(List list, Date beginDate, Date endDate) {int days = 0;
Calendar begincal= newGregorianCalendar();
Calendar endcal= newGregorianCalendar();
begincal.setTime(beginDate);
endcal.setTime(endDate);for (int i = 0; i < list.size(); i++) {
System.out.println("执行到这里了!");
Vacation vac=(Vacation) list.get(i);
Date tempDate=vac.getDate();
Calendar tempcal= newGregorianCalendar();
tempcal.setTime(tempDate);int tempDays =vac.getDays();int tempDay =tempcal.get(Calendar.DAY_OF_YEAR);int dd = 0;if ((tempDate.after(endDate)) ||(tempDate.before(beginDate))) {
System.out.println(tempDate.after(endDate));
System.out.println("执行到这里了吗???!");continue;
}else{
System.out.println("应该执行到这里了!@");while (tempDay
System.out.println("符合条件吗????");//tempcal.set(Calendar.DAY_OF_MONTH,tempDay);//原来是你在作怪!//节假日和周末可能有重叠的情况!
if ((tempcal.get(Calendar.DAY_OF_WEEK)) == 2
|| (tempcal.get(Calendar.DAY_OF_WEEK) == 1)) {
System.out
.println((tempcal.get(Calendar.DAY_OF_WEEK))== 2);
System.out
.println((tempcal.get(Calendar.DAY_OF_WEEK)== 1));
System.out.println("节假日和周末重叠的情况!"
+tempcal.get(Calendar.DAY_OF_WEEK));
days--;
}
tempcal.add(Calendar.DAY_OF_WEEK,1);
dd++;//计数器自增,不能超出法定的假期数。
days++;//符合这两种条件的自增。看一下有多少天!
tempDay++;//法定假日自增,不能超出endDate的日期数!
}
}
}//单独考虑周末的情况!不知道哪一个数字代表周六,周日!
System.out.println("周末!");for (int j = begincal.get(Calendar.DAY_OF_YEAR); j <=endcal
.get(Calendar.DAY_OF_YEAR); j++) {if (begincal.get(Calendar.DAY_OF_WEEK) == 7
|| begincal.get(Calendar.DAY_OF_WEEK) == 1) {
System.out.println("周末判断!");
days++;
}
begincal.add(Calendar.DAY_OF_YEAR,1);
}returndays;
}/***************************************************************************
* 从文件中读取字符串到集合中,然后返回集合。
*
*@paramfile
*@return*@throwsException*/
public static List getDateFromFile(File file) throwsException {
List list= newArrayList();
BufferedReader breader= new BufferedReader(newFileReader(file));
String str= "";while ((str = breader.readLine()) != null) {
Vacation vac=DateToDate.divideStr(str);
list.add(vac);
}
System.out.println(list);returnlist;
}/***************************************************************************
* 将字符串最终切割成一个假期对象!
*
*@paramstr
*@return*@throwsParseException*/
public static Vacation divideStr(String str) throwsParseException {
Vacation vac= newVacation();
String[] array= str.split(" ");
SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd");
Date date= format.parse(array[0]);int days = Integer.parseInt(array[1]);
vac.setDate(date);
vac.setDays(days);returnvac;
}/***************************************************************************
* 输入的前后两天之间的相差的天数!
*
*@parambeginDate
*@paramendDate
*@return
*/
public static intgetDays(Date beginDate, Date endDate) {long days = 0;try{if (beginDate.compareTo(endDate) > 0) {throw new IllegalArgumentException("日期输入不正确!");
}
days= (endDate.getTime() -beginDate.getTime())/ (1000 * 60 * 60 * 24);
}catch(Exception e) {
e.getStackTrace();
}return (int) days;
}/***
* 从键盘标准输入两个日期!
*
*@return
*/
public staticString[] getInDate() {
System.out.println("请输入开始和结束日期!格式如下:yyyy-MM-dd");
Scanner scanner= newScanner(System.in);
String str=scanner.nextLine();
String[] array= str.split(" ");returnarray;
}public static voidmain(String args[]) {
String[] str=DateToDate.getInDate();
SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd");try{
Date beginDate= format.parse(str[0]);
Date endDate= format.parse(str[1]);
File file= new File("F:\\jinxing.txt");
List list=DateToDate.getDateFromFile(file);int days =DateToDate.getContainVacation(list, beginDate, endDate);
System.out.println("总共的节假日包括周末:" +days);int allday =DateToDate.getDays(beginDate, endDate);
System.out.println("总共的天数:" +allday);
System.out.println("总共的工作日为:" + (allday -days));
}catch(Exception e) {
e.getStackTrace();
}
}
}