java 实现工作日计算
注:数据需要手动维护,每年维护一次,当年12月份国家会公布第二年法定节假日 日期及天数
1.表结构
CREATE TABLE `sys_calendar` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`days` varchar(200) DEFAULT NULL COMMENT '日期',
`workmarkers` varchar(255) DEFAULT NULL COMMENT '是否工作日',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1462 DEFAULT CHARSET=utf8mb4 COMMENT='自定义日历表(区分工作日)';
2.计算代码
public class DateOper {
private String holidays;//放假日
private String workdays;//工作日
public DateOper() {
String sqlholiday = "select days from sys_calendar where workmarkers='N'";// 这不是工作日查询
String sqlworkday = "select days from sys_calendar where workmarkers='Y'";//工作日查询
// 得到今年和明年的所有的假日
ArrayList<HashMap<String, String>> holidayList = DBoper.QueryData(sqlholiday);
if(holidayList!=null && holidayList.size()>0)
{
for(int i=0;i<holidayList.size();i++)
{
Map row = holidayList.get(i);
holidays += row.get("days").toString() + ",";
}
}
System.out.println(holidays);
// 得到今年和明年的所有的假日
ArrayList<HashMap<String, String>> workdayList = DBoper.QueryData(sqlworkday);
if(workdayList!=null && workdayList.size()>=0)
{
for(int i=0;i<workdayList.size();i++)
{
Map row = workdayList.get(i);
workdays += row.get("days").toString() + ",";
}
}
System.out.println(workdays);
}
public int countWorkDay(String start1, String end1) {
String strsql;
// 工作日
int workDay = 0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date start=null;
Date end = null;
try {
start=(Date) sdf.parse(start1);
end = (Date) sdf.parse(end1);
} catch (ParseException e) {
System.out.println("非法的日期格式,无法进行转换");
e.printStackTrace();
}
//int thisyear = start.getYear() + 1900;
//int nextyear = thisyear == end.getYear() ? thisyear + 1 : end.getYear() + 1900;
System.out.println("start>>"+start+" end>>"+end);
int days = getDutyDays(start, end);
System.out.println("start>>"+start1+" end>>"+end1+" days>>"+days);
return days;
}
public int getDutyDays(Date StartDate,Date EndDate) {//得到非周六周日的工作日
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
StartDate.setDate(StartDate.getDate() + 1);
int result = 0;
while (StartDate.compareTo(EndDate) <= 0) {
if (StartDate.getDay() != 6 && StartDate.getDay() != 0)//周内
{
result++;
// System.out.println(holidays);
if(!holidays.isEmpty())
{
if(holidays.indexOf(sdf.format(StartDate))>-1)//不是节假日加1
result--;
}
}
else //周末
{ if(!workdays.isEmpty())
{
if(workdays.indexOf(sdf.format(StartDate))>-1)//工作日
result++;
}
}
// System.out.println(StartDate+"-------"+StartDate.getDay()+"-----"+result+"******"+holidays.indexOf(sdf.format(StartDate))+"******"+workdays.indexOf(sdf.format(StartDate)));
StartDate.setDate(StartDate.getDate() + 1);
}
return result;
}
}
3.调用代码()
java 实现工作日计算相关推荐
- Java判断工作日计算,计算随意2个日期内的工作日
当前位置:我的异常网» Java Web开发 » 计算随意2个日期内的工作日 计算随意2个日期内的工作日 www.myexceptions.net 网友分享于:2013-08-17 浏览:51次 ...
- java 剔除工作日计算超时时间
剔除工作日计算超时时间 import com.alibaba.fastjson.JSONObject;import java.math.BigDecimal; import java.text.Par ...
- java 时间间隔 工作日,计算Java中两个日期之间的工作日数
Can anyone point me to some Java snippet wherein i can get business (except Sat and Sun) days betwee ...
- java计算工作日_Java工作日计算工具类
工作日计算工具类 主要功能:传入两个日期,返回这两个日期之间有多少个工作日. 思路: 预先设置好一定年份范围内的节假日.补休到map里.(这里暂时只设置了2017 - 2018年的) 将这个年份范围内 ...
- 星期和工作日计算,你会了吗?
1.计算某个日期是星期几 如下图,是宅男心中的大事记,要计算发生日期是周几,公式为: =WEEKDAY(B2,2) WEEKDAY函数第二参数使用2,用数字1到7表示周一到周日.这个函数在数组计算中经 ...
- Java基础-时间复杂度计算方式
Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...
- java精确除法计算,四舍五入 Java问题通用解决代码
java精确除法计算,四舍五入 Java问题通用解决代码 参考文章: (1)java精确除法计算,四舍五入 Java问题通用解决代码 (2)https://www.cnblogs.com/svenne ...
- 【Java】Float计算不准确
大家可能都遇到过,float在计算某些值时,会有不准确的情况. 比如如下情况: > 计算不准确 package com.nicchagil.study.java.demo.No10float计算 ...
- Java练习 SDUT-1586_计算组合数
计算组合数 Time Limit: 1000 ms Memory Limit: 32768 KiB Problem Description 计算组合数.C(n,m),表示从n个数中选择m个的组合数. ...
- java 多线程统计质数,Java 七 多线程计算某个范围内的质数
Java 7 多线程计算某个范围内的质数 不多说了,看代码 通用类 package java7.concurrency.math; /** * This class generates prime n ...
最新文章
- python怎么定义空矩阵_Python创建一个空的稀疏矩阵
- eclipse 使 用Ctrl+鼠标左键进入mapper.xml文件的方法
- apache配置,保你配置成功
- SpringCloud Ribbon源码探索学习
- 成年人的样子是什么样子_不只是看样子
- 【高校宿舍管理系统】第九章 寝室编号设置和宿舍初始化以及预选设置
- 程序员离职后12天,被前领导命令回去讲清代码?小伙直接说收费
- Java千百问_05面向对象(008)_java中覆盖是什么
- PR2018入门教程01-基础教程
- 西工大计算机课程表,工大、高新、交大、爱知等7所名校初一作息时间表课表新鲜出炉!...
- 谷歌跟oracle_Google vs Oracle –判决临近,Oracle的知识产权案件步履蹒跚
- Web功能测试主要包括哪些方面?
- 總結——關於2017 11 3測試的分析總結
- 计算机内存的安装方法,内存条怎么装?内存条安装与拆卸方法
- PHP获取系统时间的方法(毫秒数)
- 线性稳压器与开关稳压器的对比分析
- Java基础之《JVM性能调优(14)—CPU性能调优》
- matlab ode45三体问题,关于ode45中erf函数(输入必须为实数完全数的报错问题)
- 哪个软件可以制作GIF动态图
- SMARTFORM 条形码 二维码
热门文章
- 牛顿二项式定理学习(广义二项式定理)
- Tautology (logic)介绍
- iOS IPv6测试环境搭建及服务器ipv6测试
- 成功解决win7安装python过程,Setup failed,需要安装Windows 7 Service Pack 1
- 未经处理的异常:System.BadImageFormatException:“未能加载文件或程序集“GxIAPINET
- openvpn部署和迁移
- XCTF 攻防世界Web题目 mfw
- 【7 kyu】Descending Order
- 全球四大卫星导航系统年鉴
- Canonical Coin Systems