计算两个时间间隔小时且不包括周末,每天8小时,eg 2015-05-10 10:00:00
2015-05-20 16:00:00 要算出这两个时间相差的小时数而且不包括周末时间,其他时间一天8小时计算
并且 10:00 到18点,9点到16点这两个时间点也要计算上,该怎么写
java中时间间隔小时计算
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- jiajia333666 2015-08-27 12:25关注
之前的代码确实有问题,现在做了修改。
package aaa;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class CalculateHours {
//该处时间可以根据实际情况进行调整
int ab = 8;//上午上班时间
int ae = 12;//下午下班时间
int pb = 13;//下午上班时间
int pe = 17;//下午下班时间
int hoursPerDay = ae-ab+pe-pb;//每天上班小时数
int daysPerWeek = 5;//每周工作天数
long milsecPerDay = 1000*60*60*24;//每天的毫秒数
int hoursPerWeek = hoursPerDay*daysPerWeek;//每星期小时数public int calculateHours(String beginTime, String endTime){ Date t1 = stringToDate(beginTime);//真实开始时间 Date t2 = stringToDate(endTime);//真实结束时间 if(t1.getTime()>t2.getTime()) return -1; if(t1.getYear()==t2.getYear()&&t1.getMonth()==t2.getMonth()&&t1.getDate()==t2.getDate()){ if(t2.getHours()<=ab||t1.getHours()>pe||(t1.getHours()>=ae&&t2.getHours()<=pb)){ return 0; } if(t1.getHours()<=ab){ return calculateHoursInOneDay2(t2.getHours()); } if(t2.getHours()>=pe){ return calculateHoursInOneDay(t1.getHours()); } if(t2.getHours()<=ae||t1.getHours()>=pb){ return t2.getHours() - t1.getHours(); } if(t1.getHours()<=ae&&t2.getHours()>=pb){ return t2.getHours()-t1.getHours()-(pb-ae); } if(t2.getHours()<=pb){ return ae-t1.getHours(); } return t2.getHours()-pb; } //开始时间当天,上午上班时间 Date temp1 = new Date(t1.getYear(),t1.getMonth(),t1.getDate(),ab,0); //结束时间当天,上午上班时间 Date temp2 = new Date(t2.getYear(),t2.getMonth(),t2.getDate(),ab,0); Date sunday1;//晚于开始时间的最近的星期天 Date sunday2;//早于结束时间的最近星期天 sunday1 = new Date(temp1.getTime()+(7-temp1.getDay())*milsecPerDay); sunday2 = new Date(temp2.getTime()-temp2.getDay()*milsecPerDay); long weeks = (sunday2.getTime()-sunday1.getTime())/(milsecPerDay*7); int hour1 = 0;//第一周剩余的小时数 int hour2 = 0;//最后一周剩余的小时数 int hour3 = 0;//中间的小时数 hour3 = (int) (weeks * hoursPerWeek); if(t1.getDay()==0||t1.getDay()==6){ hour1 = hoursPerWeek; }else{ hour1 += (5-t1.getDay())*hoursPerDay; hour1 += calculateHoursInOneDay(t1.getHours()); } if(t2.getDay()==0){ hour2 = 0; }else{ hour2 += (t2.getDay()-1)*hoursPerDay; if(t2.getDay()!=6){ hour2 += calculateHoursInOneDay2(t2.getHours()); } } System.out.println(t1); System.out.println(t2); System.out.println(weeks); int hours = hour1 + hour2 + hour3; System.out.println(hours); return hours; } /** * 计算一天内的工作时间 * @param hour 当天的时刻,开始时间 * @return */ private int calculateHoursInOneDay(int hour) { if(hour>=pe) return 0; if(hour>=pb) return pe-hour; if(hour>ae) return pe-pb; if(hour>ab) return ae-hour+pe-pb; return 0; } /** * 计算一天内的工作时间 * @param hour 当天的时刻,结束时间 * @return */ private int calculateHoursInOneDay2(int hour) { if(hour>=pe) return hoursPerDay; if(hour>=pb) return ae-ab+hour-pb; if(hour>ae) return ae-ab; if(hour>ab) return hour-ab; return 0; } /** * 将字符串形式的时间转换成Date形式的时间 * @param time * @return */ private Date stringToDate(String time){ SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); //这里的格式可以自己设置 try { return format.parse(time); } catch (ParseException e) { e.printStackTrace(); return null; } }
}
这样应该可以了本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器