我们需要两个类,第一个类:

我们叫它验证类。

第二个类:

它是对法定节假日的抽象。

第一步开始:

当验证类被初始化的时候,会加载本年的所有法定节假日到一个list里:

thisYearHolidays.add(new Holiday(元旦)

.setHolidayRange(LocalDate.now().withMonth(1).withDayOfMonth(1),1)

);

thisYearHolidays.add(new Holiday(春节)

.setHolidayRange(LocalDate.now().withMonth(2).withDayOfMonth(15),7)

.setWorkDayRange(LocalDate.now().withDayOfMonth(2).withDayOfMonth(11),1)

.setWorkDayRange(LocalDate.now().withDayOfMonth(2).withDayOfMonth(24),1)

);

thisYearHolidays.add(new Holiday(清明)

.setHolidayRange(LocalDate.now().withMonth(4).withDayOfMonth(5),3)

.setWorkDayRange(LocalDate.now().withMonth(4).withDayOfMonth(8),1)

);

//此处省略...

那么,Holiday这个类,setHolidayRange与setWorkDayRange这两个函数负责的就是处理法定节假日的休息日与调休日。

public Holiday setHolidayRange(LocalDate baseDate,int holidays){

holidayList.add(baseDate);

for(int i = 1;iholidays;i++){

holidayList.add(baseDate.plusDays(i));

}

return this;

}

以上为setHolidayRange代码,setWorkDayRange相似。

接下来,当我们调用验证类的todayIsHoliday方法时,它会判断当前日期是否为法定节假日的休息日,再判断当前日期是否不在调休日内,最后判断是否是周末,代码如下:

public boolean todayIsHoliday(){

LocalDate today=LocalDate.now();

//首先判断是否是节假日

if(isHoliday(today)){

return true;

}

//判断不在调休日并且今天是周末

return !inAdjustDay(today) isWeekend(today);

}

其中,这里有两个关键函数:

predejavu sans= mono= for= powerline= ';font-size:9.0pt;= style=box-sizing: border-box;isHoliday和inAdjustDay:

isHoliday 原理就是通过循环判断传入的日期是否在法定节假日的休息日列表里:

private boolean isHoliday(LocalDate date){

//循环判断date是否在holidayList 里

for(Holiday holiday:thisYearHolidays){

if(holiday.isHoliday(date)){

return true;

}

}

return false;

}

而inAdjustDay原理同上:

private boolean inAdjustDay(LocalDate date){

for(Holiday holiday:thisYearHolidays){

if(holiday.inAdjustDay(date)){

return true;

}

}

return false;

}

这里的两个方法又各自调用了Holiday类的接口:

/*

* 判断传入的日期是否应该放假

* */

public boolean isHoliday(LocalDate date){

for(LocalDate localDate:holidayList){

if(localDate.equals(date)){

return true;

}

}

return false;

}

/*

* 判断传入的日期是否在调休日

* */

public boolean inAdjustDay(LocalDate date){

for(LocalDate localDate:workDayList){

if(localDate.equals(date)){

return true;

}

}

return false;

}

这两个方法也是通过再次循环判断传入的日期是否在内部所维护的休息日列表或工作日列表,来决定是否是休息日或者是工作日。

java实现节假日维护_谈谈JAVA实现节假日验证相关推荐

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. java 节假日_谈谈JAVA实现节假日验证

    原标题:谈谈JAVA实现节假日验证 我们需要两个类,第一个类: 我们叫它验证类. 第二个类: 它是对法定节假日的抽象. 第一步开始: 当验证类被初始化的时候,会加载本年的所有法定节假日到一个list里 ...

  3. java多核并行计算_谈谈Java任务的并行处理

    前言 谈到并行,我们可能最先想到的是线程,多个线程一起运行,来提高我们系统的整体处理速度:为什么使用多个线程就能提高处理速度,因为现在计算机普遍都是多核处理器,我们需要充分利用cpu资源:如果站的更高 ...

  4. java stream 求和_谈谈Java任务的并行处理

    作者:ksfzhaohui 前言 谈到并行,我们可能最先想到的是线程,多个线程一起运行,来提高我们系统的整体处理速度:为什么使用多个线程就能提高处理速度,因为现在计算机普遍都是多核处理器,我们需要充分 ...

  5. 中秋节图案 用java代码打出来_基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法.doc...

    基于Java代码实现判断春节.端午节.中秋节等法定节假日的方法 基于Java代码实现判断春节.端午节.中秋节等法定节假日的方法 这篇文章主要介绍了基于Java代码实现判断春节.端午节.中秋节等法定节假 ...

  6. java数组可扩展_[转载]Java数组扩容算法及Java对它的应用

    Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. 2)利用数组复制方法可以变通的实现数组扩容. 3)System.arraycopy()可以复制数组. 4)Arr ...

  7. java是什么格式_是java格式

    错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...

  8. java 检测硬盘原理_深入Java核心 Java内存分配原理精讲

    Java内存分配与管理是Java的核心技术之一,一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ...

  9. java ee开发环境_设置Java EE 6开发环境

    java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...

  10. java 注解应用技巧_改善Java应用程序性能的快速技巧

    java 注解应用技巧 曾经遇到过性能问题吗? 我也是. 如果我的经理再喊一次" faaaaster",我一生都会有听力障碍. 顺便说一句,我能听到所有噪音中的德语发音吗? ;-) ...

最新文章

  1. c语言程序设计自评报告,石家庄学院c语言程序设计自评报告.docx
  2. RIPPER算法原理
  3. c++ 模板教程(c语言中文网) 自己运行实例
  4. HDU - 6989 Didn‘t I Say to Make My Abilities Average in the Next Life?! 莫队/单调栈 + 线段树/ST表在线
  5. 华为开发者被批评在 Linux 内核刷 KPI
  6. C#开发笔记之15-如何用C#获取某月最大天数?
  7. TP3.2项目 MySQL5.7报错1055 group by新特性
  8. iOS- 非整星的评分控件(支持小数)
  9. linux下Oracle 相关命令
  10. 【洛谷P1282】多米诺骨牌
  11. Oracle版本区别[转载]
  12. 软件测试管理要素分析
  13. 好友管理系统 Python
  14. talib函数功能一览表
  15. linux steam安装目录,如何在Ubuntu Linux上下载和安装Steam
  16. 猿人学试题(非常简单js混淆、雪碧图、样式干扰 css加密、js混淆源码乱码、js混淆动态cookie、访问逻辑)
  17. Linux下用户账号管理基础
  18. 华为设备Ping命令
  19. C语言实现贪吃蛇(使用链表,适合初学者)
  20. 关于FLEX输出时:IE提示Alternate HTML content should be placed here. This content requir

热门文章

  1. android 电源管理驱动
  2. 百度云apkg手机文件怎么打开_下载不限速,这款网盘软件,轻松秒杀百度云!...
  3. SAS中的删除空格相关函数
  4. 《老路用得上的商学课》46-50学习笔记
  5. linux权限不够【操作方案】
  6. Quartus下软硬核固化到EPCS中(JTAG)延续上篇
  7. 信息差、技能差、资源差、认知差
  8. 跟着开源项目学因果推断——CausalImpact 贝叶斯结构时间序列模型(二十一)
  9. 利用vtk实现管状模型沿中心线切割平面
  10. 第十六届全国大学智能车竞赛线上国赛部分队伍名单(除东北赛区之外)