java算工作日

这里要计算工作日,其实没有什么大的难点,难就难在这里规定了法定假日放假三天,春节也是。五一和十一就比较容易只要判断月日就可以了,春节是阴历的1月1日,这个阴历怎么个算法呢?这里我倒是搞不懂了,不知道怎么解决,唉,用了比较笨的方法。看我代码吧:


 import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

public class testDate {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  testDate td = new testDate();
  td.showTime("2006-01-01","2006-03-01");
 }
 
 /**
  * 显示工作日
  * @param date1
  * @param date2
  */
 public void showTime(String date1,String date2){
//  这里要判断第二个参数日期要比第一个参数日期大先继续运行
  GregorianCalendar gc = new GregorianCalendar();
  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
  SimpleDateFormat holidaysdf=new SimpleDateFormat("MM-dd");
  //工作日
  int workDay=0;
  try {
   Date d1 = sdf.parse(date1);
   Date d2 = sdf.parse(date2);
   gc.setTime(d1);
//   System.out.println(sdf2.format(d1));
   long time = d2.getTime() - d1.getTime();
   long day = time/3600000/24 + 1;
//   System.out.println(day);
   for(int i=0;i<day;i++){
    if (gc.get(GregorianCalendar.DAY_OF_WEEK)!= GregorianCalendar.SATURDAY &&
     gc.get(GregorianCalendar.DAY_OF_WEEK)!= GregorianCalendar.SUNDAY) {
//     System.out.println(holidaysdf.format(gc.getTime()));
     if(!holidayList(holidaysdf.format(gc.getTime())) && !holidayOfCN(sdf.format(gc.getTime())))
      workDay++;
    }
    //天数加1
    gc.add(gc.DATE,1);
   }
//   gc.add(gc.DATE,1);
//   System.out.println(sdf.format(gc.getTime()));
  } catch (Exception e) {
   e.printStackTrace();
  }
  System.out.println(workDay);
 }
 
 //春节放假三天,定义到2020年
 public boolean holidayOfCN(String year){
  List ls = new ArrayList();
  ls.add("2005-02-09");ls.add("2005-02-10");ls.add("2005-02-11");
  ls.add("2006-01-29");ls.add("2006-01-30");ls.add("2006-01-31");
  ls.add("2007-02-18");ls.add("2007-02-19");ls.add("2007-02-21");
  ls.add("2008-02-07");ls.add("2008-02-08");ls.add("2008-02-09");
  ls.add("2009-01-26");ls.add("2009-01-27");ls.add("2009-01-28");
  ls.add("2010-02-14");ls.add("2010-02-15");ls.add("2010-02-16");
  ls.add("2011-02-03");ls.add("2011-02-04");ls.add("2011-02-05");
  ls.add("2012-01-23");ls.add("2012-01-24");ls.add("2012-01-25");
  ls.add("2013-02-10");ls.add("2013-02-11");ls.add("2013-02-12");
  ls.add("2014-01-31");ls.add("2014-02-01");ls.add("2014-02-02");
  ls.add("2015-02-19");ls.add("2015-02-20");ls.add("2015-02-21");
  ls.add("2006-02-08");ls.add("2006-02-09");ls.add("2006-02-10");
  ls.add("2017-01-28");ls.add("2017-01-29");ls.add("2017-01-30");
  ls.add("2018-02-16");ls.add("2018-02-17");ls.add("2018-02-18");
  ls.add("2019-02-05");ls.add("2019-02-06");ls.add("2019-02-07");
  ls.add("2020-01-25");ls.add("2020-01-26");ls.add("2020-01-27");
  if(ls.contains(year))
   return true;
  return false;
 }
 //法定假日,五一和国庆
 public boolean holidayList(String findDate){
  List ls = new ArrayList();
  ls.add("05-01");
  ls.add("05-02");
  ls.add("05-03");
  ls.add("10-01");
  ls.add("10-02");
  ls.add("10-03");
  if(ls.contains(findDate))
   return true;
  return false;
 }
}


大家有空的,帮忙测试一下,我只是测试几个月份。

参考的文章:http://www.cnblogs.com/l_dragon/archive/2005/08/23/221036.html

有好的阴历转阳历的算法可以MSN我,大家讨论讨论学习一下。[softwarefans@hotmail.com]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值