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 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观 ...
随机推荐
- spring bean的重新加载
架构体系 在谈spring bean的重新加载前,首先我们来看看spring ioc容器. spring ioc容器主要功能是完成对bean的创建.依赖注入和管理等功能,而这些功能的实现是有下面几个组 ...
- java中的Comparable接口
类对象之间比较"大小"往往是很有用的操作,比如让对象数组排序时,就需要依赖比较操作.对于不同的类有不同的语义.如Student类,比较2个学生对象可以比较他们的score分数来评判 ...
- Windows Azure - Troubleshooting & Debugging: Role Recycling
每年总会碰到几次Role Recycling,处理完记录下 :) 1. 和往常一样先排查系统日志,修复异常.> 没效果 :( 2. 排查Event Viewer中的Logs,没有发现比较奇怪Lo ...
- js 斐波那契数列(兔子问题)
对于JS初学者来说,斐波那契数列一直是个头疼的问题,总是理不清思路. 希望看完这篇文章之后会对你有帮助. 什么是斐波那契数列 : 答: 斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契(Le ...
- Dll的生成,转化为OMF格式的DLL
extern "C" { __declspec(dllexport) int psq_add(int a, int b); } C:\Users\pansq>mkexp my ...
- CentOS7下Apache及Tomcat开启SSL
安装: 复制代码 yum install -y openssl #使用openssl可手动创建证书 yum install -y httpd yum install -y mod_ssl 防火墙打开8 ...
- WebForm 内置对象2
Session: 与Cookies相比 相同点:每一台电脑访问服务器,都会是独立的一套session,key值都一样,但是内容都是不一样的 以上所有内容,都跟cookies一样 不同点: 1.Sess ...
- 接口测试(二)—HttpClient
使用HttpClient进行接口测试,所需要使用的相关代码 HttpClient进行接口测试所需jar包:httpclient.jar.httpcore.jar.commons-logging.jar ...
- WebSocket///////////////////////z
作者:Ovear链接:http://www.zhihu.com/question/20215561/answer/40316953来源:知乎著作权归作者所有,转载请联系作者获得授权. 一.WebSoc ...
- UVALive 7139 Rotation(矩阵前缀和)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...