谈谈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程序员进阶的那些知识和方向
谈谈Java程序员进阶的那些知识和方向 记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackover ...
- 老鸟谈谈JAVA EE的学习
老鸟谈谈JAVA EE的学习 因为出差和项目的原因,有将近一个月的时间没有更新博客了,今天终于得闲,和兄弟们分享一下JAVA EE的学习心得.书中带过,直入主题,下面我们首先看看什么是JAVA EE. ...
- 谈谈Java的集合组件
让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...
- 史上最全Java表单验证封装类
package com.tongrong.utils; import java.util.Collection; import java.util.Map; import java.util.rege ...
- Java的登陆验证问题
java中的登陆验证问题可以有多种方式进行验证,通过拦截器功能完成,可以通过过滤器功能完成,也可以简单的代码在JSP页面中单独完成,其中都 涉及到一个关键的验证步骤,这个验证原理ASP,PHP,JAV ...
- java对身份证验证及正则表达式解析
原文地址:http://www.cnblogs.com/zhongshengzhen/ java对身份证验证及正则表达式解析 package service; import java.text.Par ...
- 微信支付java版V3验证数据合法性
[TOC] 1. 微信支付java版V3验证数据合法性 概要:使用微信支付接口时,微信会返回或回调给商户XML数据,开发者需要验证微信返回的数据是否合法. 特别提醒:商户系统对于支付结果通知的内容一定 ...
- 谈谈java的BlockingQueue
http://www.cnblogs.com/archy_yu/archive/2013/04/19/3018479.html 博客园 首页 新随笔 联系 管理 随笔- 92 文章- 0 评论- ...
- Java实现邮箱验证
Java实现邮箱验证 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开 ...
随机推荐
- org.springframework.beans.factory.BeanCreationException,Invocation of init method failed,Context initialization failed
G:\javaanzhuang\apache-tomcat-\bin\catalina.bat run [-- ::,] Artifact ssm_qingmu02_web:war exploded: ...
- EDK II之USB主控制器(EHCI)驱动的实现框架
本文简要介绍一下UEFI中EHCI驱动的代码实现框架: 下图是HCDI: 上图是Host驱动程序向上层驱动提供的接口图: 1.大部分接口的最后动作都是去操作主控制器寄存器,ECHI的spec:< ...
- Django自定义装饰器
装饰器模板: def decorator(func): def wrapper(*args,**kwargs): return func(*args,**kwargs) return wrapper ...
- 纯手写SpringMVC到SpringBoot框架项目实战
引言 Spring Boot其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 通过这种方式,springboot ...
- 【python37--面向对象】
一. self是什么 绑定方法,self就是实例对象的唯一标志 >>> class Ball: def setName(self,name): self.name = name de ...
- Bootstrap3基础 form-control 圆角的输入框,光标放入后边框变色
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...
- CSS的再深入2(更新中···)
在上一章中,我们又引出了一个知识点: margin的问题 margin:0 auto:(上下为0,左右自适应)会解决元素的居中问题(auto 自适应)前提是给这个元素设置width 同时,我们又要学习 ...
- Spring-Cache 注解 @Cacheable,@CachePut , @CacheEvict
1.自动生成key @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Ob ...
- (转)Multi-Object-Tracking-Paper-List
Multi-Object-Tracking-Paper-List 2018-08-07 22:18:05 This blog is copied from: https://github.com/Sp ...
- 论文笔记之:Natural Language Object Retrieval
论文笔记之:Natural Language Object Retrieval 2017-07-10 16:50:43 本文旨在通过给定的文本描述,在图像中去实现物体的定位和识别.大致流程图如下 ...