java 判断日期是否是节假日
1.新建一个excel命名为“节假日.xls”存放节假日,模板格式如下
2.判断是否是节假日的类 工作日返回true ,休息日返回false。
需要引用poi-bin-3.9包,包放在博客文件中
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class Festival {
private final String FILE_NAME = "节假日.xls";
private List<Date> festival = new ArrayList<Date>();// 节假日
private List<Date> workDay = new ArrayList<Date>();// 工作日
public Festival() {
File excel = this.getExcel();
try {
FileInputStream fin = new FileInputStream(excel);
HSSFWorkbook hssfworkbook = new HSSFWorkbook(fin);
HSSFSheet sheet = hssfworkbook.getSheetAt(0);
int last = sheet.getLastRowNum();
int index = 1;
Date dt = null;
while (index <= last) {
HSSFRow row = sheet.getRow(index);
/* 读取法定节假日 */
HSSFCell cell = row.getCell((short) 0);
if (cell != null) {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
dt = HSSFDateUtil.getJavaDate(cell
.getNumericCellValue());
if (dt != null && dt.getTime() > 0) {
this.festival.add(dt);
}
}
}
/* 读取特殊工作日 */
cell = row.getCell((short) 1);
if (cell != null) {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
dt = HSSFDateUtil.getJavaDate(cell
.getNumericCellValue());
if (dt != null && dt.getTime() > 0) {
// System.out.println(this.getDate(dt));
this.workDay.add(dt);
}
}
}
index++;
}
fin.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public File getExcel() {
File excel = null;
try {
URL url = Festival.class.getResource("/");
url = new URL(url, "../" + FILE_NAME);
excel = new File(url.getPath());
return excel;
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return excel;
}
/**
* 从EXCEL文件中读取节假日
*
* @return
*/
public List getFestival() {
return this.festival;
}
public List getSpecialWorkDay() {
return this.workDay;
}
/**
* 判断一个日期是否日节假日 法定节假日只判断月份和天,不判断年
*
* @param date
* @return
*/
public boolean isFestival(Date date) {
boolean festival = false;
Calendar fcal = Calendar.getInstance();
Calendar dcal = Calendar.getInstance();
dcal.setTime(date);
List<Date> list = this.getFestival();
for (Date dt : list) {
fcal.setTime(dt);
// 法定节假日判断
if (fcal.get(Calendar.MONTH) == dcal.get(Calendar.MONTH)
&& fcal.get(Calendar.DATE) == dcal.get(Calendar.DATE)) {
festival = true;
}
}
return festival;
}
/**
* 周六周日判断
*
* @param date
* @return
*/
public boolean isWeekend(Date date) {
boolean weekend = false;
Calendar cal = Calendar.getInstance();
cal.setTime(date);
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
|| cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
weekend = true;
}
return weekend;
}
/**
* 是否是工作日 法定节假日和周末为非工作日
*
* @param date
* @return
*/
public boolean isWorkDay(Date date) {
boolean workday = true;
if (this.isFestival(date) || this.isWeekend(date)) {
workday = false;
}
/* 特殊工作日判断 */
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date);
Calendar cal2 = Calendar.getInstance();
for (Date dt : this.workDay) {
cal2.setTime(dt);
if (cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR)
&& cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH)
&& cal1.get(Calendar.DATE) == cal2.get(Calendar.DATE)) { // 年月日相等为特殊工作日
workday = true;
}
}
return workday;
}
public Date getDate(String str) {
Date dt = null;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
dt = df.parse(str);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return dt;
}
public String getDate(Date date) {
String dt = null;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
dt = df.format(date);
return dt;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Date date=new Date();//取时间
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(date);
System.out.println(dateString);
Festival f = new Festival();
Date dt = f.getDate(dateString);
System.out.println(f.isWorkDay(dt));
}
}
java 判断日期是否是节假日的更多相关文章
- java判断日期与星期
原文:http://www.open-open.com/code/view/1440592372888 import java.text.SimpleDateFormat; import java.u ...
- Java 判断日期的方法
//str:传入的日期 eg:"2018-07-23" function IsDate(str) { arr = str.split("-"); if(arr. ...
- Java判断指定日期是否为工作日
Java判断指定日期是否为工作日 转自:https://www.jianshu.com/p/966659492f2f 转:https://www.jianshu.com/p/05ccb5783f65转 ...
- JAVA判断当前日期是节假日还是工作日
package com.buybal.bat.util; import java.io.File; import java.io.FileInputStream; import java.io.IOE ...
- Java中用正则表达式判断日期格式是否正确
1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...
- Java判断字符串是否符合yyyyMMdd日期格式
Java判断字符串是否符合yyyyMMdd日期格式 代码: /** * 判断参数的格式是否为“yyyyMMdd”格式的合法日期字符串 * */ public static boolean isVali ...
- 判断日期是否为法定节假日的API接口与示例函数
需要判定某日期是否为法定节假日,由于国家的节假日每年都在变动,所以使用接口判定是必要的.可惜的是,这样的接口并不多,在此汇总三个: http://tool.bitefu.net/jiari/ http ...
- Java Date 日期 时间 相关方法
DateTools.java import java.text.SimpleDateFormat; import java.util.Date; /** * 日期操作类 */ public class ...
- Java 8 – 日期和时间实用技巧
当你开始使用Java操作日期和时间的时候,会有一些棘手.你也许会通过System.currentTimeMillis() 来返回1970年1月1日到今天的毫秒数.或者使用Date类来操作日期:当遇到加 ...
随机推荐
- HDU 1287 MC挖矿世界 set bfs
MC挖矿世界 题目连接: http://acm.uestc.edu.cn/#/problem/show/1287 Description 银牌爷和柱神开始玩MC啦,但是怪物实在是太多了,于是银牌爷决定 ...
- centos安装gcc
1.安装gcc基本开发工具环境 yum groupinstall 'Development Tools' 2.安装完成后查看安装是否成功 whereis gcc 3.查看gcc版本 gcc --ver ...
- 64位系统下同时使用64位和32位的eclipse
eclipse.ini 文件使用说明 The -vm option and its value (the path) must be on separate lines. The value must ...
- Java垃圾回收精粹 — Part4
Java垃圾回收精粹分4个部分,本篇是第4部分.在第4部分里介绍了G1收集器.其他并发收集器以及垃圾收集监控和调优. Garbage First (G1) 收集器 G1 (-XX:+UseG1GC)收 ...
- Oracle sql"NOT IN"语句优化,查询A表有、B表没有的数据
记录量大的情况下,采用NOT IN查询,那肯定会慢的无法接受.比如: SELECT A.* FROM TABLE_A WHERE A.USER_ID NOT IN (SELECT B.USER_ID ...
- Python学习(七)面向对象 ——封装
Python 类的封装 承接上一节,学了Student类的定义及实例化,每个实例都拥有各自的name和score.现在若需要打印一个学生的成绩,可定义函数 print_score() 该函数为类外的函 ...
- iOS:CoreData数据库的使用一(创建单个数据库表)
CoreData数据库框架:mac系统自带的数据库,它是苹果公司对sqlite进行封装而来的,既提供了对数据库的主要操作,也提供了具体的视图关系模型. 需要用到三个对象: 1•Managed Obje ...
- OpenCV学习(12) 图像的腐蚀与膨胀(3)
通过使用不同的结构元素来进行膨胀腐蚀操作,可以检测图像中的角点,下面就一步一步看这个算法如果实现角点检测. 原图像: 首先我们创建四个结构元素 先用十字结构元素对原图像进行膨胀操作,得到下面的图像 再 ...
- HDU 4649 - Professor Tian(2013MUTC5-1007)(概率)
不知道这题算作什么类型的题目,反正很巧妙,队友小杰想了没一会就搞定了 为了学习这种方法,我也搞了搞,其实思路不难想,位运算嘛,只有0和1,而且该位的运算只影响该位,最多20位,一位一位地计算即可,只需 ...
- c#如何操作ppt的播放 【转】
C#控制ppt的代码 包括打开ppt文件.读取幻灯页,插入幻灯片,自动播放等 using System.Collections.Generic; using System.Linq; using Sy ...