科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道java 中计算任意2个日期之间的工作天数

java 中计算任意2个日期之间的工作天数

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

对于任意2个日期比如:date_start=2006-10-1、date_end=2006-10-14 ,首先计算这连个日期之间的时间间隔,然后分别对date_start 和date_end 取得它们下一个星期一的日期。

作者:有妖怪啊 来源:CSDN 2008年2月29日

关键字: 工作天数 日期 java

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

 public int getDaysBetween(java.util.Calendar d1, java.util.Calendar d2) {
  if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
   java.util.Calendar swap = d1;
   d1 = d2;
   d2 = swap;
  }
  int days = d2.get(java.util.Calendar.DAY_OF_YEAR)
    - d1.get(java.util.Calendar.DAY_OF_YEAR);
  int y2 = d2.get(java.util.Calendar.YEAR);
  if (d1.get(java.util.Calendar.YEAR) != y2) {
   d1 = (java.util.Calendar) d1.clone();
   do {
    days += d1.getActualMaximum(java.util.Calendar.DAY_OF_YEAR);
    d1.add(java.util.Calendar.YEAR, 1);
   } while (d1.get(java.util.Calendar.YEAR) != y2);
  }
  return days;
 }

 /**
  * 计算2个日期之间的相隔天数
  * @param d1
  * @param d2
  * @return
  */
 public int getWorkingDay(java.util.Calendar d1, java.util.Calendar d2) {
  int result = -1;
  if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
   java.util.Calendar swap = d1;
   d1 = d2;
   d2 = swap;
  }

  int betweendays = getDaysBetween(d1, d2);

  
  int charge_date = 0;
  int charge_start_date = 0;//开始日期的日期偏移量
  int charge_end_date = 0;//结束日期的日期偏移量
   // 日期不在同一个日期内
   int stmp;
   int etmp;
   stmp = 7 - d1.get(Calendar.DAY_OF_WEEK);
   etmp = 7 - d2.get(Calendar.DAY_OF_WEEK);
   if (stmp != 0 && stmp != 6) {// 开始日期为星期六和星期日时偏移量为0
    charge_start_date = stmp - 1;
   }
   if (etmp != 0 && etmp != 6) {// 结束日期为星期六和星期日时偏移量为0
    charge_end_date = etmp - 1;
   }
//  }
  result = (getDaysBetween(this.getNextMonday(d1), this.getNextMonday(d2)) / 7)
    * 5 + charge_start_date - charge_end_date;
  //System.out.println("charge_start_date>" + charge_start_date);
  //System.out.println("charge_end_date>" + charge_end_date);
  //System.out.println("between day is-->" + betweendays);
  return result;
 }

 public String getChineseWeek(Calendar date) {
  final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五",
    "星期六" };

  int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);

  // System.out.println(dayNames[dayOfWeek - 1]);
  return dayNames[dayOfWeek - 1];

 }

 /**
  * 获得日期的下一个星期一的日期
  *
  * @param date
  * @return
  */
 public Calendar getNextMonday(Calendar date) {
  Calendar result = null;
  result = date;
  do {
   result = (Calendar) result.clone();
   result.add(Calendar.DATE, 1);
  } while (result.get(Calendar.DAY_OF_WEEK) != 2);
  return result;
 }
 
 /**
  *
  * @param d1
  * @param d2
  * @return
  */
 public int getHolidays(Calendar d1,Calendar d2){
  return this.getDaysBetween(d1, d2)-this.getWorkingDay(d1, d2);
  
 }

}

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章