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 holidays = new ArrayList();
private List workdays = new ArrayList();
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
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
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判断指定日期是否为工作日
Java判断指定日期是否为工作日 转自:https://www.jianshu.com/p/966659492f2f 转:https://www.jianshu.com/p/05ccb5783f65转 ...
java 判断日期是否是节假日
1.新建一个excel命名为“节假日.xls”存放节假日,模板格式如下 2.判断是否是节假日的类 工作日返回true ,休息日返回false. 需要引用poi-bin-3.9包,包放在博客文件中 im ...
PHP 判断当前日期是否是法定节假日或者休息日 (原)
//判断日期是不是节假日或者双休日接口 @param time [时间(时间戳或者Y-m-d都可)] public function get_type_by_date(){ $t = $_GET['t ...
使用Java判断字符串中的中文字符数量
Java判断一个字符串str中中文的个数,经过总结,有以下几种方法(全部经过验证),可根据其原理判断在何种情况下使用哪个方法: 1. char[] c = str.toCharArray(); for ...
判断当前日期是否在[startDate, endDate]区间
/** * 判断当前日期是否在[startDate, endDate]区间 * * @param startDate 开始日期 * @param endDate 结束日期 * @author jqli ...
Java判断回文数算法简单实现
好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...
Java 判断操作系统类型(适用于各种操作系统)
Java 判断操作系统类型(适用于各种操作系统) 最近一段时间写一个授权的程序,需要获取很多信息来保证程序不能随意复制使用,必须经过授权才可以. 为了限制用户使用的操作系统,必须有统一的方法来获取才可 ...
java判断字符串是否为空的方法总结
http://blog.csdn.net/qq799499343/article/details/8492672 以下是java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观 ...
Java获取当前日期的前一个月,前一天的时间
Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -); //得到前一天 calendar.add(Cal ...
随机推荐
Linux系统调用和库函数调用的区别
Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思 ...
在CentOS安装cobbler自动化部署软件
#!/bin/bash##cobbler server addressip=192.168.119.133#DHCP server net and address fanweinet=192.168. ...
jquery tab
jquery tab