package com.buybal.bat.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List; import org.apache.log4j.Logger; import jxl.Cell;
import jxl.CellType;
import jxl.DateCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.read.biff.BiffException; /**
* 根据读取配置的excel判断是否为法定节假日,及法定工作日
* @author Administrator
*
*/
public class HolidayUtil { private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private List<String> holidays = new ArrayList<String>();
private List<String> workdays = new ArrayList<String>();
private Date now = new Date();
private Logger logger = Logger.getLogger(HolidayUtil.class); /**
* 判断当天是否是工作日 (工作日:true;节假日:false)
* @param filePath
* @return
*/
public boolean isWorkDay(String filePath){
boolean flag = true;
parseExcel(filePath);//读取excel中的节假日和工作日 int dateType = getDateType(); //如果excel不存在当前日期。判断是否周六日
if(dateType==0){ Calendar c = Calendar.getInstance();
if(c.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY||
c.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){
flag = false;
} }else{//如果存在当前日期,根据返回的类型判断 if(dateType==1){//节假日
flag = false;
} /* else if(dateType==2){//工作日
flag = true;
}*/ } logger.info("当前日期是:"+(flag==true?"工作日":"节假日")); return flag;
} /**
* 根据判断当前时间是否是节假日还是工作日 (excel中不存在当前日期:0;节假日:1;工作日:2)
* 如果当前日期在excel中的节假日和工作日都写了,默认的工作日
* @return
*/
private int getDateType(){
int type = 0; String today = sdf.format(now); if(holidays.size()>0){
for(String holiday:holidays){
if(holiday.equals(today)){
type = 1;
break;
}
}
} if(workdays.size()>0){
for(String workday:workdays){
if(workday.equals(today)){
type = 2;
}
}
} return type;
} /**
* 读取excel中的节假日和工作日
* @param filePath
*/
private void parseExcel(String filePath){
if(filePath==null||"".equals(filePath)){
return ;
} Workbook workbook = null;
try {
workbook = Workbook.getWorkbook(new FileInputStream(filePath));
Sheet sheets[] = workbook.getSheets(); if(sheets==null||sheets.length==0){
return;
}
Sheet sheet = sheets[0];//取到第一个sheet
int rows = sheet.getRows();
//获取第一列数据-节假日
for(int rowIndex = 1;rowIndex <rows;rowIndex++){
Cell cell = sheet.getCell(0, rowIndex);
if(cell==null){
break;
} if(cell.getType() == CellType.DATE){
DateCell dateCell = (DateCell)cell;
Date date = dateCell.getDate();
String dateStr = sdf.format(date);
holidays.add(dateStr);
} } //获取第二列数据-工作日
for(int rowIndex = 1;rowIndex <rows;rowIndex++){
Cell cell = sheet.getCell(1, rowIndex);
if(cell==null){
break;
}
if(cell.getType() == CellType.DATE){
DateCell dateCell = (DateCell)cell;
Date date = dateCell.getDate();
String dateStr = sdf.format(date);
workdays.add(dateStr);
}
} logger.info(holidays.toString());
logger.info(workdays.toString()); } catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(workbook!=null){
workbook.close();
workbook = null;
}
}
} public static void main(String[] args) {
// HolidayUtil h = new HolidayUtil();
// boolean flag = h.isWorkDay("holidaySet.xls");
// boolean flag = h.isWorkDay("");
}
}

excel这么个样子,必须是最左边两列:

如果excel中为空,就会只判断周六日是节假日

JAVA判断当前日期是节假日还是工作日的更多相关文章

  1. Java判断指定日期是否为工作日

    Java判断指定日期是否为工作日 转自:https://www.jianshu.com/p/966659492f2f 转:https://www.jianshu.com/p/05ccb5783f65转 ...

  2. Java通过基姆拉尔森公式判断当前日期是不是工作日

    基姆拉尔森公式 算法如下: 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 在公式中d表示日期中的日数,m表示月份数,y表示年数. 注意:在公 ...

  3. java 判断日期是否是节假日

    1.新建一个excel命名为“节假日.xls”存放节假日,模板格式如下 2.判断是否是节假日的类 工作日返回true ,休息日返回false. 需要引用poi-bin-3.9包,包放在博客文件中 im ...

  4. PHP 判断当前日期是否是法定节假日或者休息日 (原)

    //判断日期是不是节假日或者双休日接口 @param time [时间(时间戳或者Y-m-d都可)] public function get_type_by_date(){ $t = $_GET['t ...

  5. 使用Java判断字符串中的中文字符数量

    Java判断一个字符串str中中文的个数,经过总结,有以下几种方法(全部经过验证),可根据其原理判断在何种情况下使用哪个方法: 1. char[] c = str.toCharArray(); for ...

  6. 判断当前日期是否在[startDate, endDate]区间

    /** * 判断当前日期是否在[startDate, endDate]区间 * * @param startDate 开始日期 * @param endDate 结束日期 * @author jqli ...

  7. Java判断回文数算法简单实现

    好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...

  8. Java 判断操作系统类型(适用于各种操作系统)

    Java 判断操作系统类型(适用于各种操作系统) 最近一段时间写一个授权的程序,需要获取很多信息来保证程序不能随意复制使用,必须经过授权才可以. 为了限制用户使用的操作系统,必须有统一的方法来获取才可 ...

  9. java判断字符串是否为空的方法总结

    http://blog.csdn.net/qq799499343/article/details/8492672 以下是java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观 ...

随机推荐

  1. Android Studio踩坑记

    1. 模拟器在管理器中可以运行,但是点击run时死活找不到:    在sdk的/platform-tools/目录下找到adb.exe工具    打开cmd,输入下面两条命令    adb kill- ...

  2. couldn't find setter for xxxxx

    springmvc hibernate框架,在执行普通的插入操作时报错,仔细检查实体类文件,确认该属性的getter setter方法都是有的,哭哭(´;︵;`)jpa策略生成的当然有.可是老是报这个 ...

  3. NSSet

    版权声明:本文为博主原创文章,未经博主允许不得转载. 一.NSSet的创建和初始化 创建一个空的NSSet集合:+ (void)set; 用数组来创建NSSet集合:+ (id)setWithArra ...

  4. opencv 抠图联通块(c接口)

    #include "stdio.h" #include "iostream" #include "opencv/cv.h" #include ...

  5. VBA控制outlook自动发送邮件(转)

    使用Excel VBA实现Outlook自动发送邮件 | 在工作上我们都会遇到批量发送邮件的情况,面对重复而规律性的工作,可以使用Excel的VBA实现自动批量化发送邮件.大大减小工作时间,提升工作效 ...

  6. MFC获取Windows启动状态(正常启动、安全模式启动、网络安全模式启动)

    UINT nFlags = GetSystemMetrics(SM_CLEANBOOT); switch(nFlags) { : AfxMessageBox(TEXT("正常启动" ...

  7. linux(centos)用户与权限

    1.用户管理 2.用户组 3.权限分配 一.查看与用户相关文件命令: 1.cat 2.more 3.head /etc/passwd    #查看文件的前十行 4.head -2 /etc/passw ...

  8. Eclipse 恢复删除的文件

    这件事发生在,两周以前,那时我正在写LLT,补充完代码覆盖率.突然,我的代码呢,我的代码去哪里了?由于对Eclipse还不太熟悉,代码就则样被我从磁盘删掉了.然后火速给同事打电话,同事说如果删除了,而 ...

  9. Mysql数据库的使用总结之ERROR 1146 (42S02)

    在使用mysql数据库过程中,遇到了错误ERROR 1146 (42S02):Table doesn't exist,经过了两天,终于解决了这个问题.引起该错误的原因不同,对应的解决方法也不同.这里只 ...

  10. windows下利用virtual 安装 flask

    出处: https://segmentfault.com/a/1190000002450878 本文介绍Windows下如何从零开始搭建Python + Flask开发环境. 安装Python 2.7 ...