首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-09-13 
计算两个日期点间的周末天数闲来无事,想起这么一个问题,所以就试着搞了搞这个算法,希望大家可以给出更加高

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

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;}}
1 楼 mfkvfn 2012-04-06   假设星期一~星期天用0~6表示。假设起始日期是星期a,终止时期是星期b,中间间隔天数是x。
则0<=a<=6,0<=b<=6, b==(a+x)%7。只要给出a,x就可以得到b。

周末天数=间隔周数*2+其它天数。
间隔周数=x/7。(取整数)

其它天数的计算有以下几种:
(A) 0<=a<=b<=4<=6,其它天数=0。
(B) 0<=a<=4<=b<=6,其它天数=b-4。
(C) 0<=4<=a<=b<=6,其它天数=b-a。
(D) 0<=b<=a<=4<=6,其它天数=2。
(E) 0<=b<=4<=a<=6,其它天数=6-a。
(F) 0<=4<=b<=a<=6,其它天数=(6-a)+(b-4)=2+b-a。

比如a=2(周三),x=20,b=1(周二)。则周未天数是 20/7*2+2=6。
比如a=5(周六),x=9,b=0(周一)。则周未天数是 9/7*2+(6-5)=3。 2 楼 kaobian 2012-04-06   mfkvfn 写道假设星期一~星期天用0~6表示。假设起始日期是星期a,终止时期是星期b,中间间隔天数是x。
则0<=a<=6,0<=b<=6, b==(a+x)%7。只要给出a,x就可以得到b。

周末天数=间隔周数*2+其它天数。
间隔周数=x/7。(取整数)

其它天数的计算有以下几种:
(A) 0<=a<=b<=4<=6,其它天数=0。
(B) 0<=a<=4<=b<=6,其它天数=b-4。
(C) 0<=4<=a<=b<=6,其它天数=b-a。
(D) 0<=b<=a<=4<=6,其它天数=2。
(E) 0<=b<=4<=a<=6,其它天数=6-a。
(F) 0<=4<=b<=a<=6,其它天数=(6-a)+(b-4)=2+b-a。

比如a=2(周三),x=20,b=1(周二)。则周未天数是 20/7*2+2=6。
比如a=5(周六),x=9,b=0(周一)。则周未天数是 9/7*2+(6-5)=3。
你这个判断条件 挺好的,有一个地方需要修改一下
在第三个条件上 结果应该是 b-a+1

热点排行