原标题:谈谈JAVA实现节假日验证

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

我们叫它验证类。

第二个类:

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

第一步开始:

当验证类被初始化的时候,会加载本年的所有法定节假日到一个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的面向对象

    类的拷贝和构造 C++是默认具有拷贝语义的,对于没有拷贝运算符和拷贝构造函数的类,可以直接进行二进制拷贝,但是Java并不天生支持深拷贝,它的拷贝只是拷贝在堆上的地址,不同的变量引用的是堆上的同一个对 ...

  2. java装箱_谈谈Java的自动装箱和拆箱

    Java作为面向对象语言,有人认为所看到的都是对象,事实上,在Java SE 5之前,基本类型默认并不是采用对象存在的如果您想要把基本类型作为对象来处理,就必须自行转换,不过,在Java SE 5之后 ...

  3. java 农历 节假日_基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法...

    一.前言 最近工作上遇到一个问题,后端有一个定时任务,需要用JAVA每天判断法定节假日.周末放假,上班等情况,其实想单独通过逻辑什么的去判断中国法定节假日的放假情况,基本不可能,因为国家每一年的假期可 ...

  4. java url路径包含中文_谈谈 Java 类加载机制

    概述 类加载器主要分为两类,一类是 JDK 默认提供的,一类是用户自定义的. JDK 默认提供三种类加载器: Bootstrap ClassLoader 启动类加载器:每次执行 java 命令时都会使 ...

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

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

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

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

  7. check在java意思吗_谈谈Java:Checked Exception与 unCheckException Runtime Exception 的区别...

    Java里有个很重要的特色是Exception ,也就是说允许程序产生例外状况.而在学Java 的时候,我们也只知道Exception 的写法,却未必真能了解不同种类的Exception 的区别. 首 ...

  8. java掌握_掌握Java 11的Constantdynamic

    java掌握 为了使JVM对动态语言更具吸引力,该平台的第七版已将invokedynamic引入了其指令集. Java开发人员通常不会注意到此功能,因为该功能已隐藏在Java字节码中. 简而言之,通过 ...

  9. java常见_关于Java的常见误解

    java常见 Java是世界上使用最广泛的语言(需要引用),每个人对此都有自己的见解. 由于它是主流,所以通常会嘲笑它,有时是对的,但有时批评并没有触及现实. 我将尝试解释我最喜欢的5个关于Java的 ...

最新文章

  1. react绑定this_React绑定模式:处理“ this”的5种方法
  2. SpringBoot2.x 官方推荐缓存框架-Caffeine高性能设计剖析
  3. 德鲁克的17条思想精髓,读懂管理的本质
  4. asp之GetArray提取链接地址,以$Array$分隔的代码
  5. LeetCode 644. 最大平均子段和 II(二分查找)*
  6. python人工智能是什么意思_Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现...
  7. Navicat 连接Mysql 报错1251
  8. java lock可重入_一文彻底理解ReentrantLock可重入锁的使用
  9. Andriod UI设计之度量单位说明(DIP,DP,PX,SP)
  10. 最小可分辨温差四杆靶空间频率选择
  11. 展望未来城市,万物皆可运营
  12. 台式计算机把光驱改成硬盘,笔记本电脑怎么更换SSD并将光驱位改为机械硬盘位?_硬件教程...
  13. 143_win10如何删除默认输入法
  14. iOS循环引用问题集合、内存泄漏、僵尸对象、代码静态分析
  15. 惠普打印机只打印一半_打印机打出来的字只有一半是什么原因
  16. 城市虚拟交通系统与交通发展决策支持模式研究
  17. easypoi利用模板导出图片到Excel;解决easypoi导出图片到合并单元格单元格被拉伸的问题
  18. Gerrit no Verified 在最新的2.7版本之后添加Verified
  19. sql查询大于平均得分的球员的名字和得分,并追加显示平均得分的列
  20. 双色球彩票生成之一用户彩票号码随机生成

热门文章

  1. gulp项目中的package配置说明
  2. java验证域名_域名规则校验Java版本
  3. Android P(9.0) 证书加密算法变更
  4. Spark Checkpoint读操作代码分析
  5. 计算机体系结构在线读,计算机体系结构复习题.ppt
  6. 怎样来实现流量削峰方案
  7. 单片机模拟计算机课设,《单片机课程设计实例》.doc
  8. ICSharpCode.SharpZipLib 压缩、解压文件
  9. 本地代码怎么上传到码云?
  10. 关于tarjan的浅解