java节假日算法_Java节假日算法

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();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值