计算两个日期点间的周末天数

闲来无事,想起这么一个问题,所以就试着搞了搞这个算法,希望大家可以给出更加高效和牛叉的算法来求取“两个时间点间的周末天数”


import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
* @author kaobian.iteye.com
* @date Apr 5, 2012
* @time 12:46:44 PM
*/
public class ComputeWorkDay {

public static void main(String[] args) {
//初始化第一个日期
Calendar c1 = Calendar.getInstance();
//初始化第二个日期,这里的天数可以随便的设置
Calendar c2 = Calendar.getInstance();
c2.add(Calendar.DAY_OF_YEAR,13);
//查看一下第二个日子的具体时间
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(c2.getTime()));
//第三个三处代表是否 去除 双休日
System.out.println(computeHolidays(c2,c1,false));
}

public static int computeHolidays(Calendar cal1,Calendar cal2,boolean ignoreHolidays){
//算出两个日期间的天数
int days = cal2.get(Calendar.DAY_OF_YEAR)-cal1.get(Calendar.DAY_OF_YEAR);
//我们的计算的天数是包含两个日期,也就是一个 闭区间
days = days > 0 ? days + 1 : 1 - days;

if(ignoreHolidays){
return days;
}

int holidays = 0;
//确定一个 大日期
if(cal1.compareTo(cal2) > 0){
Calendar temp = cal1;
cal1 = cal2;
cal2 = temp;
temp = null;
}
//只要两个日期之间相隔的天数 是7 的整数倍,那么 双休日的时间 一定为 2*(对7的整数倍)
holidays = (days/7)*2;
//去除整数倍的时间后,看看两个日期间的 周末天数
cal1.add(Calendar.DAY_OF_YEAR,(days/7)*7);

int day = -1;
//如果两个日期间的 间隔天数正好是7的整数倍也就不用 循环找周末了
do{
day = cal2.get(Calendar.DAY_OF_WEEK);
if (day == 1 || day == 7)
holidays++;
if(cal1.compareTo(cal2) == 0)
break;
cal2.add(Calendar.DAY_OF_YEAR,-1);
} while ((days%7) > 0);

return holidays;
}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值