智能跳过节假日算法java_java计算两个日期之间的天数,排除节假日和周末
如题所说,计算两个日期之前的天数,排除节假日和周末。这里天数的类型为double,因为该功能实现的是请假天数的计算,有请一上午假的为0.5天。
不够很坑的是每个日期都要查询数据库,感觉很浪费时间。
原则:
1.节假日存放在数据库中
实现步骤:
1.循环每个日期
2.判断每个日期是否为节假日或者为周末
3.若不是节假日和周末,天数+1
代码:
public doublecalLeaveDays(Date startTime,Date endTime){
doubleleaveDays = 0;//从startTime开始循环,若该日期不是节假日或者不是周六日则请假天数+1Date flag = startTime;//设置循环开始日期Calendar cal = Calendar.getInstance();
//循环遍历每个日期while(flag.compareTo(endTime)!=1){
cal.setTime(flag);//判断是否为周六日intweek = cal.get(Calendar.DAY_OF_WEEK) - 1;if(week == 0|| week == 6){//0为周日,6为周六//跳出循环进入下一个日期 cal.add(Calendar.DAY_OF_MONTH,+1); flag = cal.getTime();continue; }
//判断是否为节假日try{
//从数据库查找该日期是否在节假日中/*这里为数据库操作*/
/*传入该日期flag,使用sql语句判断flag是否between节假日开始日期and节假日结束日期*/
/*count为从数据库查出的行数*/if(count > 0){
//跳出循环进入下一个日期 cal.add(Calendar.DAY_OF_MONTH,+1); flag = cal.getTime();continue; }
}catch(Exception e){
e.printStackTrace(); }
//不是节假日或者周末,天数+1
leaveDays = leaveDays + 1;//日期往后加一天 cal.add(Calendar.DAY_OF_MONTH,+1); flag = cal.getTime(); }
returnleaveDays;}
发现运行太慢了,更新了一下代码
实现步骤不变,不过把节假日先取出来,之前是每循环一个日期就要查一次数据库,现在只需要查一次数据库。
代码:
public double calLeaveDays(Date startTime,Date endTime){
double leaveDays = 0;
//从startTime开始循环,若该日期不是节假日或者不是周六日则请假天数+1
Date flag = startTime;//设置循环开始日期
Calendar cal = Calendar.getInstance();
//从数据库得到节假日的起始日期和终止日期
List maps = null;
try{
maps = getDao().getHolidaysPeriod;//maps用于保存符合条件的所有节假日的起始日期和终止日期,如startDate:2017-07-13,endDate:2017-07-14
}catch (Exception e){
e.printStackTrace();
}
//用于格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
int week;
outer:while(flag.compareTo(endTime)!=1){
cal.setTime(flag);
//判断是否为周六日
week = cal.get(Calendar.DAY_OF_WEEK) - 1;
if(week == 0 || week == 6){//0为周日,6为周六
//跳出循环进入下一个日期
cal.add(Calendar.DAY_OF_MONTH, +1);
flag = cal.getTime();
continue;
}else{
//判断是否为节假日
if(maps != null || !maps.isEmpty()){
inner:for (Map map : maps){
if(flag.compareTo((Date)map.get("startDay"))>-1&&flag.compareTo((Date)map.get("endDay"))<1){
//跳出循环进入下一个日期
cal.add(Calendar.DAY_OF_MONTH, +1);
flag = cal.getTime();
continue outer;
}
}
}
}
leaveDays = leaveDays + 1;
//日期往后加一天
cal.add(Calendar.DAY_OF_MONTH, +1);
flag = cal.getTime();
}
return leaveDays;
}
智能跳过节假日算法java_java计算两个日期之间的天数,排除节假日和周末相关推荐
- 智能跳过节假日算法java_java计算两个日期之前的天数实例(排除节假日和周末)...
java计算两个日期之前的天数实例(排除节假日和周末) 发布时间:2020-09-02 23:07:01 来源:脚本之家 阅读:108 作者:jingxian 如题所说,计算两个日期之前的天数,排除节 ...
- JavaScript:实现计算两个日期之间的天数算法(附完整源码)
JavaScript:实现计算两个日期之间的天数算法 const isLeap = (year) => {if (year % 400 === 0) return trueelse if (ye ...
- java 两日期的周数_利用 Java 中 Calendar 计算两个日期之间的天数和周数
利用 Java 中 Calendar 计算两个日期之间的天数和周数 前言 究竟什么是一个 Calendar 呢? 中文的翻译就是日历, 那我们立刻可以想到我们生活中有阳 (公) 历阴 (农) 历之分它 ...
- 如何利用计算机计算天数,如何应用Win10系统电脑中的计算器计算两个日期之间的天数?...
如何应用Win10系统电脑中的计算器计算两个日期之间的天数? 相信很多小伙伴都有在使用windows10系统的电脑,其中的计算器如何才能用来计算两个日期之间的天数呢?方法很简单,下面小编就来为大家介绍 ...
- 微软面试题目(一) 计算两个日期之间的天数
微软的面试,没能参加啊,只好打听了下题目,其中一题是在20分钟内写出:计算两个日期之间天数的方法.昨天晚上想了一下,今天实现了一下,经过调试,差不多一个小时才弄好,惭愧啊 代码如下: /******* ...
- sql年月日加减法,计算两个日期之间的天数
1.年月日加减法(时间字段为 hiredate,表名为 emp) DB2 selecthiredate -5 day as hd_sub_5day,hiredate +5 day as hd_add ...
- 计算两个日期之间的天数,你知道哪些函数能够计算呢?
有时候我们需要计算两个日期之间的天数,一般情况下只需要计算一两个的话可以直接口算,但是整个表格的日期都需要计算出他们之间的天数,还是用口算的方法吗?当然不能这么浪费时间!Excel中有计算两个日期之间 ...
- java怎么计算相隔多少天_java计算两个日期之间相差天数和相隔天数详解
大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,"相差"和"相隔"是有区别的,然而就是这些区别害死很多人, ...
- Go获取n天前或后的日期、日期转秒时间戳、计算两个日期之间的天数差
获取n天前或后的日期: // GetBeforeTime 获取n天前的秒时间戳.日期时间戳 // _day为负则代表取前几天,为正则代表取后几天,0则为今天 func GetBeforeTime(_d ...
最新文章
- 前端学习(1172):模板字符串
- UE4 蓝图RandomStreams
- @程序员,夏天来了,你该送心仪女生这个啦
- 一些SharePoint 2007开发的在线课程
- 解释HTTP中Get和Post。它们有什么区别,哪个使用时更加安全?
- 数据库优化常用的途径(方法)
- 使用Bochs模拟器和IDA调试MBR
- 使用Python,OpenCV反转视频
- c语言数字大小32768,c语言中int(2byte)的表示范围是为什么是-32768~32767!
- 植物大战僵尸无尽版游泳池优秀阵容推荐(一)
- html送女朋友的网页,做一个网页送给心动女孩子生日礼物(表白也合适)
- 浙大OJ网址及ACM题目分类
- SCOI2012 Blinker的仰慕者 BZOJ 2757
- OneDrive账号被冻结如何进行解冻
- 你应该知道的十八大著名定律法则
- 非齐次Poisson过程的期望与方差
- 用Universe Sandbox模拟引力弹弓(地球+木星)
- Servlet之 http://localhost:8080/ 详解
- Java | 第一章:Java环境搭建
- FANUC机器人进行负载设定和负载推算的具体方法