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. Swift 语法篇

    一.输出语句 print("Hello World") print("Hello World 11", "Hello World 22", ...

  2. 自动化小应用系列----利用selenium启动多个独立的浏览器

    在我们测试的时候对于同一个系统,我们往往需要登陆多个不同的账号,由于cookie的原因,我们只能退出一个账号在登陆另外一颗账号,非常麻烦.我们可以使用selenium来启动浏览器,这样每个浏览器的属性 ...

  3. VS2015编译Qt5.7.0生成支持XP的静态库(很不错)

    一.编译工具 1.VS2015 编译Qt5.7.0的所需VS版本:Visual Studio 2013 (Update1)或Visual Studio 2015 (Update2).因为Update补 ...

  4. web app 自适应方案总结 关键字 弹性布局之rem

    关于rem,主要参考文档 1.腾讯ISUX (http://isux.tencent.com/web-app-rem.html) 2.http://www.w3cplus.com/css3/defin ...

  5. Java线程:线程的同步-同步方法

    Java线程:线程的同步-同步方法   线程的同步是保证多线程安全访问竞争资源的一种手段. 线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源.什么时候需要考虑同步,怎么同步等等问 ...

  6. Java:对象的强、软、弱、虚引用

    转自: http://zhangjunhd.blog.51cto.com/113473/53092 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无 ...

  7. 项目在vs中打开后识别不出来ashx页面的解决方法

    在web.config配置文件中指定页面版本 <add key="webPages:Version" value="2.0"/> <?xml ...

  8. jqurey datatable mRender FnRender 不起作用问题

    用这个插件的   知道他不起作用,就应该知道他是做什么的了吧,我的不起作用的原因是版本的问题 我在网上查找的用法 是 "fnRender":fuction(obj){} 可是不起作 ...

  9. apache on centos

    httpd https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-apache-startstop.html

  10. object_id用法

    特别是在建表建存储过程的时候进场会写到: IF OBJECT_ID('Table_Test','U') IS NOT NULL DROP TABLE Table_Test 这种方式代替了以往所使用的 ...