注:数据需要手动维护,每年维护一次,当年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 实现工作日计算相关推荐

  1. Java判断工作日计算,计算随意2个日期内的工作日

    当前位置:我的异常网» Java Web开发 » 计算随意2个日期内的工作日 计算随意2个日期内的工作日 www.myexceptions.net  网友分享于:2013-08-17  浏览:51次 ...

  2. java 剔除工作日计算超时时间

    剔除工作日计算超时时间 import com.alibaba.fastjson.JSONObject;import java.math.BigDecimal; import java.text.Par ...

  3. java 时间间隔 工作日,计算Java中两个日期之间的工作日数

    Can anyone point me to some Java snippet wherein i can get business (except Sat and Sun) days betwee ...

  4. java计算工作日_Java工作日计算工具类

    工作日计算工具类 主要功能:传入两个日期,返回这两个日期之间有多少个工作日. 思路: 预先设置好一定年份范围内的节假日.补休到map里.(这里暂时只设置了2017 - 2018年的) 将这个年份范围内 ...

  5. 星期和工作日计算,你会了吗?

    1.计算某个日期是星期几 如下图,是宅男心中的大事记,要计算发生日期是周几,公式为: =WEEKDAY(B2,2) WEEKDAY函数第二参数使用2,用数字1到7表示周一到周日.这个函数在数组计算中经 ...

  6. Java基础-时间复杂度计算方式

    Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...

  7. java精确除法计算,四舍五入 Java问题通用解决代码

    java精确除法计算,四舍五入 Java问题通用解决代码 参考文章: (1)java精确除法计算,四舍五入 Java问题通用解决代码 (2)https://www.cnblogs.com/svenne ...

  8. 【Java】Float计算不准确

    大家可能都遇到过,float在计算某些值时,会有不准确的情况. 比如如下情况: > 计算不准确 package com.nicchagil.study.java.demo.No10float计算 ...

  9. Java练习 SDUT-1586_计算组合数

    计算组合数 Time Limit: 1000 ms Memory Limit: 32768 KiB Problem Description 计算组合数.C(n,m),表示从n个数中选择m个的组合数. ...

  10. java 多线程统计质数,Java 七 多线程计算某个范围内的质数

    Java 7 多线程计算某个范围内的质数 不多说了,看代码 通用类 package java7.concurrency.math; /** * This class generates prime n ...

最新文章

  1. python怎么定义空矩阵_Python创建一个空的稀疏矩阵
  2. eclipse 使 用Ctrl+鼠标左键进入mapper.xml文件的方法
  3. apache配置,保你配置成功
  4. SpringCloud Ribbon源码探索学习
  5. 成年人的样子是什么样子_不只是看样子
  6. 【高校宿舍管理系统】第九章 寝室编号设置和宿舍初始化以及预选设置
  7. 程序员离职后12天,被前领导命令回去讲清代码?小伙直接说收费
  8. Java千百问_05面向对象(008)_java中覆盖是什么
  9. PR2018入门教程01-基础教程
  10. 西工大计算机课程表,工大、高新、交大、爱知等7所名校初一作息时间表课表新鲜出炉!...
  11. 谷歌跟oracle_Google vs Oracle –判决临近,Oracle的知识产权案件步履蹒跚
  12. Web功能测试主要包括哪些方面?
  13. 總結——關於2017 11 3測試的分析總結
  14. 计算机内存的安装方法,内存条怎么装?内存条安装与拆卸方法
  15. PHP获取系统时间的方法(毫秒数)
  16. 线性稳压器与开关稳压器的对比分析
  17. Java基础之《JVM性能调优(14)—CPU性能调优》
  18. matlab ode45三体问题,关于ode45中erf函数(输入必须为实数完全数的报错问题)
  19. 哪个软件可以制作GIF动态图
  20. SMARTFORM 条形码 二维码

热门文章

  1. 牛顿二项式定理学习(广义二项式定理)
  2. Tautology (logic)介绍
  3. iOS IPv6测试环境搭建及服务器ipv6测试
  4. 成功解决win7安装python过程,Setup failed,需要安装Windows 7 Service Pack 1
  5. 未经处理的异常:System.BadImageFormatException:“未能加载文件或程序集“GxIAPINET
  6. openvpn部署和迁移
  7. XCTF 攻防世界Web题目 mfw
  8. 【7 kyu】Descending Order
  9. 全球四大卫星导航系统年鉴
  10. Canonical Coin Systems