只计算工作日 java

条件:开始时间,在不计算工作日下的结束时间(都是精确到秒的精确时间)。问题:算出只计算工作日下的实际时间。只考虑了去除周末的情形。

说不好思路了,看看代码吧,参数是开始时间和结束时间的毫秒数,返回的是实际时间的毫秒数

private static long OnlyWorkTime(long start, long end){
		long endMill = 0L;
		GregorianCalendar gc = new GregorianCalendar();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		Date startDate = new Date(start);
		Date endDate = new Date(end);
		long workDay=0;
		try {
			Date startTempDate = sdf.parse(sdf.format(startDate));
			Date endTempDate = sdf.parse(sdf.format(endDate));
			long mod = end - endTempDate.getTime();
			gc.setTime(startTempDate);
			long time = endTempDate.getTime() - startTempDate.getTime();
			long day = time/3600000/24;
			System.out.println("day...." + day);
			if(0 == day){
				while(gc.get(GregorianCalendar.DAY_OF_WEEK)==GregorianCalendar.SATURDAY || 
						gc.get(GregorianCalendar.DAY_OF_WEEK)==GregorianCalendar.SUNDAY) {
					gc.add(GregorianCalendar.DATE, 1);
			    }
			}else{
				while(workDay < day){
					gc.add(GregorianCalendar.DATE, 1);
				    if (gc.get(GregorianCalendar.DAY_OF_WEEK)!= GregorianCalendar.SATURDAY && 
							gc.get(GregorianCalendar.DAY_OF_WEEK)!= GregorianCalendar.SUNDAY) {
						workDay++;
				    }
				}
			}
			
			System.out.println("gc...." + sdf.format(gc.getTime()));
			endMill = mod + gc.getTime().getTime();
			System.out.println("endDate...." + new Date(endMill));
			return endMill;
		} catch (Exception e) {
			e.printStackTrace();
			return 0;
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值