Java计算时间区间内工作日天数,并去除放假日与周末重叠数据

  • 实际生活中,国家法定假日可能与周六周日重叠,所以需要去重。对于放假补班的特殊情况,需要另外补充

实际生活中,国家法定假日可能与周六周日重叠,所以需要去重。对于放假补班的特殊情况,需要另外补充

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;public class Test {public static void main(String[] args) throws ParseException {workDay("2019-03-01~2019-05-08","section","");}public static boolean isWeekend(String bDate) throws ParseException {DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");Date bdate = format1.parse(bDate);Calendar cal = Calendar.getInstance();cal.setTime(bdate);if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){return true;} else{return false;}}public  static List<String> getDayListOfDate(String beginDateStr, String endDateStr) {SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");Date beginDate = null;Date endDate = null;Calendar beginGC = null;Calendar endGC = null;List<String> list = new ArrayList<String>();try {beginDate = f.parse(beginDateStr);endDate = f.parse(endDateStr);beginGC = Calendar.getInstance();beginGC.setTime(beginDate);endGC = Calendar.getInstance();endGC.setTime(endDate);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {list.add(sdf.format(beginGC.getTime()));beginGC.add(Calendar.DAY_OF_MONTH, 1);}return list;} catch (Exception e) {e.printStackTrace();return null;}}public static List<String> getWeekendListOfDate(String beginDateStr, String endDateStr) {SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");Date beginDate = null;Date endDate = null;Calendar beginGC = null;Calendar endGC = null;List<String> list = new ArrayList<String>();try {beginDate = f.parse(beginDateStr);endDate = f.parse(endDateStr);beginGC = Calendar.getInstance();beginGC.setTime(beginDate);endGC = Calendar.getInstance();endGC.setTime(endDate);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {int week = getWeek(beginGC.getTime());if ( week == 1 || week == 7) {list.add(sdf.format(beginGC.getTime()));}beginGC.add(Calendar.DAY_OF_MONTH, 1);}return list;} catch (Exception e) {e.printStackTrace();return null;}}public static int getWeek(Date date){Calendar c = new GregorianCalendar();c.setTime(date);int weekInt = c.get(Calendar.DAY_OF_WEEK);return weekInt;}/*** 获取台湾学校上课天数* ~~台湾是我国不可分割的重要一部分,希望两岸人民一家亲,早日回归祖国怀抱~~* @param schoolId 学校id* @param dateValue 日期区间【2018-01-01~2018-12-31】* @param dateStuts 日期状态* @return 应出席天数* @throws ParseException */public static int workDay(String dateValue,String dateStuts,String schoolId) throws ParseException {List<String> list = new ArrayList<String>();//假定放假日期list.add("2019-05-01");list.add("2019-04-06");//周六list.add("2019-04-07");//周日list.add("2019-03-08");if("day".equals(dateStuts)) {//先判断是否是台湾地区规定假日,或学校放假日,再判断是否是周六周日//List<String> list = this.leaveRefundDao.getHolidaysFromSchoolSchedule(dateValue, dateValue, schoolId);if(list != null && !list.isEmpty()) {return 1;} else {if(isWeekend(dateValue)) {return 0;} else {return 1;}}} else {String dateFrom = dateValue.split("~")[0];String dateTo = dateValue.split("~")[1];if(dateFrom.equals(dateTo)) {//先判断是否是台湾地区规定假日,或学校放假日,再判断是否是周六周日//List<String> list = this.leaveRefundDao.getHolidaysFromSchoolSchedule(dateFrom, dateFrom, schoolId);if(list != null && !list.isEmpty()) {return 1;} else {if(isWeekend(dateFrom)) {return 0;} else {return 1;}}} else {//获取时间区间总天数List<String> days = getDayListOfDate(dateFrom, dateTo);//获取时间区间内学校放假日期//List<String> holidays =leaveRefundDao.getHolidaysFromSchoolSchedule(dateFrom,dateTo,schoolId);//获取时间区间内的周六周日日期List<String> weekends = getWeekendListOfDate(dateFrom, dateTo);//利用HashSet的特性去重Set<String> holidaySet = new HashSet<String>();//得到所有的假期holidaySet.addAll(list);holidaySet.addAll(weekends);Iterator<String> iterator = holidaySet.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());          }return 0;}}}}

Java计算时间区间内工作日天数相关推荐

  1. java计算时间区间工作日_Java如何计算两个日期之间的工作日数?

    以下代码可帮助您查找两个日期之间指定的工作日(星期一,星期二,星期三等)的数量.我们下面使用的解决方案是在两个日期之间循环,并检查这些日期的工作日是否等于我们要计算的日期.package org.nh ...

  2. java计算时间的秒数差,去掉周末和节假日

    java计算时间的秒数差,去掉周末和节假日 如题所说,计算两个时间的秒数(工作日),拿到这个需求,首先想到的就是怎么去掉周末和节假日,或者两个时间有一个在周末或节假日,或者两个时间都在,要分别进行处理 ...

  3. java计算时间差距_硬计算和软计算之间的差异

    java计算时间差距 什么是计算? (What is Computing?) The process of accomplishing a particular task with the help ...

  4. python判断当前时间是否在两个时间之间_Python 判断时间是否在时间区间内的实例...

    判断时间是否在时间区间内 大家都知道 3<4<5这种连等式判断在python中是可行的 >>> 3<4<5 True 那么给定时间是否在时间区间内,也可以用连 ...

  5. mysql 日期截止,MySQL查询以开始日期和结束日期计算日期范围内的天数

    要计算日期范围内的天数,您需要使用来查找日期之间的差额DATEDIFF(). 让我们首先创建一个表:mysql> create table DemoTable730 ( StartDate da ...

  6. java计算两个日期之间天数

    java计算两个日期之间天数 jxts = DateFunction.getNumberOfDays(jxErq, qsjxrq); public static long getNumberOfDay ...

  7. sql 查询一段时间区间内的值

    1.sql 查询一段时间区间内的值 select to_char(to_date('2022-03-02','yyyy-mm-dd')+level-1,'yyyy-mm-dd') as day_val ...

  8. java计算两个日期间隔天数

    /*** 计算两个日期间隔天数** @param startTime : 开始时间* @param endTime : 结束时间* @return*/public static int caculat ...

  9. java判断时间区间 隔天_Java初中级程序员面试题宝典

    Java基础部分 &与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假:但是&&当第一个条件不成之后,后面的条件都 ...

最新文章

  1. 剑指offer: 二进制中1的个数 python 实现
  2. 计算机审计应用功能,《计算机审计》模拟试题及答案
  3. offsetof宏和container_of宏
  4. Stream流的常见生成方式
  5. linux c之通过管道父子进程实现同步通信
  6. 第九届蓝桥杯省赛C++A组第二题 ---星期一
  7. IIS出现 分析器错误消息: 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的...
  8. 2020-12-04
  9. PuTTY/PuttyGen介绍
  10. 鸿蒙系统服务器在哪,鸿蒙的服务中心怎么打开?鸿蒙服务中心打开及关闭教程...
  11. oracle中文chr,Oracle中chr(10) chr(9)和chr(13)用法和意义
  12. 计算机硬盘问题要求备份在弄,硬盘驱动器故障解决方案
  13. 外贸怎么开发客户?这些你不一定知道
  14. windows 2003 x86 32位中Oracle 10G数据库使用超过1.7G的sga的方法
  15. 百度高级搜索指令大全
  16. 智力题------扔硬币吃苹果
  17. 计算机视觉专业排名,2020美国人工智能专业排名TOP10!
  18. 秉火429笔记之五控制RGB彩灯
  19. Jar包冲突详解(Java)
  20. 盛邦安全创始人权晓文入选IDC中国CSO名人堂十大人物

热门文章

  1. python生日祝福短信_python自动发送生日祝福邮件
  2. neo4j 查询同一节点的两个上级_如何用Neo4j和ScikitLearn做机器学习任务?| 附超详细分步教程...
  3. vscode注释快捷键失效且无键位冲突时解决方案
  4. 华为手机坏了数据怎么导出_手机视频怎么导出音频?
  5. 同步式SPWM两电平正弦脉宽调制逆变器(全波三角波)——正弦波为调制波(双重傅里叶分析)
  6. 剪辑音乐要很久?3行语句Python瞬间搞定
  7. Vue学习(十六):组件间通信
  8. 数据分析——K-Means(K均值聚类算法)——糖潮丽子
  9. React-Native 实现,Steam集换式卡牌悬浮特效
  10. 在服务端部署cobaltstrike连接超时的问题