JAVA判断当前日期是节假日还是工作日
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判断当前日期是节假日还是工作日的更多相关文章
- Java判断指定日期是否为工作日
Java判断指定日期是否为工作日 转自:https://www.jianshu.com/p/966659492f2f 转:https://www.jianshu.com/p/05ccb5783f65转 ...
- Java通过基姆拉尔森公式判断当前日期是不是工作日
基姆拉尔森公式 算法如下: 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 在公式中d表示日期中的日数,m表示月份数,y表示年数. 注意:在公 ...
- 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 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观 ...
随机推荐
- float导致父级元素塌陷的问题
利用float进行页面布局时常常会出现父级元素没有高度的塌陷问题,如以下代码: <!DOCTYPE html> <html> <head lang="en&qu ...
- SQL CURSOR
SET NOCOUNT ON; DECLARE @vendor_id int, @vendor_name nvarchar(50), @message varchar(80), @produc ...
- mongoperf用法
mongoperf是mongoDB自带工具,用于评估磁盘随机IO性能. 官方文档 使用方法 作用:用于部署前,评估mongodb所在存储的IO性能 用法:mongoperf <conffile, ...
- sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO
sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO 今天在弄一个 sqlalchemy 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...
- Union和Union All到底有什么区别
以前一直不知道Union和Union All到底有什么区别,今天来好好的研究一下,网上查到的结果是下面这个样子,可是还是不是很理解,下面将自己亲自验证: Union:对两个结果集进行并集操作,不包括重 ...
- SQL优化----百万数据查询优化
百万数据查询优化 1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率.现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构.索引的使用要恰到好处,其使用原则如下: ...
- Java实现冒泡排序
冒泡排序思想就是将数列的相邻两个数比较,较大的数往后保存,小的数往前. package Sort; import java.util.Arrays; public class BubbleSort { ...
- Transaction Save Point (SET XACT_ABORT { ON | OFF })
ref:http://blog.csdn.net/wym3587/article/details/6940630 ref:http://www.cnblogs.com/jiajiayuan/archi ...
- Python调用C++
/***gcc -o libpycall.so -shared -fPIC pycall.c*/ #include <stdio.h> #include <stdlib.h> ...
- 系统右键菜单添加剪贴板清空项(隐藏DOS窗口)
@color 0A @title 系统右键菜单添加剪贴板清空项(隐藏DOS窗口) by wjshan0808 @echo off echo 请输入右键菜单名称 set /p name= ::创建本机A ...