1.新建一个excel命名为“节假日.xls”存放节假日,模板格式如下

2.判断是否是节假日的类 工作日返回true ,休息日返回false。

需要引用poi-bin-3.9包,包放在博客文件中

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class Festival {
 private final String FILE_NAME = "节假日.xls";
 private List<Date> festival = new ArrayList<Date>();// 节假日
 private List<Date> workDay = new ArrayList<Date>();// 工作日

public Festival() {
  File excel = this.getExcel();

try {

FileInputStream fin = new FileInputStream(excel);
   HSSFWorkbook hssfworkbook = new HSSFWorkbook(fin);
   HSSFSheet sheet = hssfworkbook.getSheetAt(0);
   int last = sheet.getLastRowNum();
   int index = 1;
   Date dt = null;
   while (index <= last) {
    HSSFRow row = sheet.getRow(index);

/* 读取法定节假日 */
    HSSFCell cell = row.getCell((short) 0);
    if (cell != null) {
     if (HSSFDateUtil.isCellDateFormatted(cell)) {
      dt = HSSFDateUtil.getJavaDate(cell
        .getNumericCellValue());

if (dt != null && dt.getTime() > 0) {
       this.festival.add(dt);

}
     }

}

/* 读取特殊工作日 */
    cell = row.getCell((short) 1);

if (cell != null) {
     if (HSSFDateUtil.isCellDateFormatted(cell)) {
      dt = HSSFDateUtil.getJavaDate(cell
        .getNumericCellValue());

if (dt != null && dt.getTime() > 0) {
       // System.out.println(this.getDate(dt));
       this.workDay.add(dt);
      }
     }

}

index++;
   }
   fin.close();
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

public File getExcel() {
  File excel = null;
  try {
   URL url = Festival.class.getResource("/");
   url = new URL(url, "../" + FILE_NAME);
   excel = new File(url.getPath());
   return excel;
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return excel;
 }

/**
  * 从EXCEL文件中读取节假日
  *
  * @return
  */
 public List getFestival() {
  return this.festival;
 }

public List getSpecialWorkDay() {
  return this.workDay;
 }

/**
  * 判断一个日期是否日节假日 法定节假日只判断月份和天,不判断年
  *
  * @param date
  * @return
  */
 public boolean isFestival(Date date) {
  boolean festival = false;
  Calendar fcal = Calendar.getInstance();
  Calendar dcal = Calendar.getInstance();
  dcal.setTime(date);
  List<Date> list = this.getFestival();
  for (Date dt : list) {
   fcal.setTime(dt);

// 法定节假日判断
   if (fcal.get(Calendar.MONTH) == dcal.get(Calendar.MONTH)
     && fcal.get(Calendar.DATE) == dcal.get(Calendar.DATE)) {
    festival = true;
   }
  }
  return festival;
 }

/**
  * 周六周日判断
  *
  * @param date
  * @return
  */
 public boolean isWeekend(Date date) {
  boolean weekend = false;
  Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
    || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
   weekend = true;
  }
  return weekend;
 }

/**
  * 是否是工作日 法定节假日和周末为非工作日
  *
  * @param date
  * @return
  */
 public boolean isWorkDay(Date date) {
  boolean workday = true;
  if (this.isFestival(date) || this.isWeekend(date)) {
   workday = false;
  }

/* 特殊工作日判断 */
  Calendar cal1 = Calendar.getInstance();
  cal1.setTime(date);
  Calendar cal2 = Calendar.getInstance();
  for (Date dt : this.workDay) {
   cal2.setTime(dt);
   if (cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR)
     && cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH)
     && cal1.get(Calendar.DATE) == cal2.get(Calendar.DATE)) { // 年月日相等为特殊工作日
    workday = true;
   }
  }
  return workday;
 }

public Date getDate(String str) {
  Date dt = null;
  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  try {
   dt = df.parse(str);
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return dt;

}

public String getDate(Date date) {
  String dt = null;
  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  dt = df.format(date);

return dt;

}

/**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Date date=new Date();//取时间

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
   String dateString = formatter.format(date);
  
   System.out.println(dateString);

Festival f = new Festival();
  Date dt = f.getDate(dateString);
  System.out.println(f.isWorkDay(dt));
 }

}

java 判断日期是否是节假日的更多相关文章

  1. java判断日期与星期

    原文:http://www.open-open.com/code/view/1440592372888 import java.text.SimpleDateFormat; import java.u ...

  2. Java 判断日期的方法

    //str:传入的日期 eg:"2018-07-23" function IsDate(str) { arr = str.split("-"); if(arr. ...

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

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

  4. JAVA判断当前日期是节假日还是工作日

    package com.buybal.bat.util; import java.io.File; import java.io.FileInputStream; import java.io.IOE ...

  5. Java中用正则表达式判断日期格式是否正确

    1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...

  6. Java判断字符串是否符合yyyyMMdd日期格式

    Java判断字符串是否符合yyyyMMdd日期格式 代码: /** * 判断参数的格式是否为“yyyyMMdd”格式的合法日期字符串 * */ public static boolean isVali ...

  7. 判断日期是否为法定节假日的API接口与示例函数

    需要判定某日期是否为法定节假日,由于国家的节假日每年都在变动,所以使用接口判定是必要的.可惜的是,这样的接口并不多,在此汇总三个: http://tool.bitefu.net/jiari/ http ...

  8. Java Date 日期 时间 相关方法

    DateTools.java import java.text.SimpleDateFormat; import java.util.Date; /** * 日期操作类 */ public class ...

  9. Java 8 – 日期和时间实用技巧

    当你开始使用Java操作日期和时间的时候,会有一些棘手.你也许会通过System.currentTimeMillis() 来返回1970年1月1日到今天的毫秒数.或者使用Date类来操作日期:当遇到加 ...

随机推荐

  1. cherokee +php fastcgi 出现 No input file specified 故障一例

    在arch上编译cherokee 时用的--with-wwwroot=/srv/http.在建立虚拟服务器时,只要虚拟服务器的根目录位于/srv/http下,php页面都能正确运行.但只要将拟服务器的 ...

  2. undefined详解

    [对于<JS高级程序设计>的理解] “即使未初始化的变量会自动被赋值undefined值,但显式地初始化变量依然是明智的选择.如果能够做到这一点,那么当typeof操作符返回‘undefi ...

  3. VS2017安装后如何移动 Windows Kits文件夹

    MS的回答 LINK Try the following technique: Close all programs, move the “Windows Kits” folder to anothe ...

  4. Git本地仓库与Github远程仓库关联

    如果你已经在本地创建了一个Git仓库,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,那就需要用到SSH Key,github拿到了你的公钥就会知道内容是你推送的. SSH Key ...

  5. 如何编译Linux内核

    内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性.Linux作为一个自由软件,在广 大爱好者的支持下,内核版本不断更新.新的内核修订了旧内 ...

  6. sweet home 3d 免费的家居设计软件

    Sweet home 3d是一个室内设计软件,可以帮助你快速的画出你家的平面图,家具的摆放位置,并且支持3D方式查看. 下载地址: http://sourceforge.net/projects/sw ...

  7. [Android Pro] android root权限破解分析

    许 多机友新购来的Android机器没有破解过Root权限,无法使用一些需要高权限的软件,以及进行一些高权限的操作,其实破解手机Root权限是比较简 单及安全的,破解Root权限的原理就是在手机的/s ...

  8. iOS:带主标题、副标题、图像类型的表格视图UITableView

    制作一个通讯录,包括姓名.电话.头像,将表格视图类型设置为UITableViewCellStyleSubtitle 效果图: //创建一个联系人的类,初始化数据 在视图控制器中实现表格内容的显示 #i ...

  9. PowerDesigner教程系列(二)概念数据模型

    目标:本文主要介绍PowerDesigner概念数据模型以及实体.属性创建.一.新建概念数据模型1)选择File-->New,弹出如图所示对话框,选择CDM模型(即概念数据模型)建立模型. 2) ...

  10. 盗COOKIE之方法总结

    1.xss跨站盗cookie 2.ajax跨域盗cookie 3.hosts文件映射 对于第一种方法,首先:在有跨站漏洞的页面贴上跨站代码如: <script>window.open('h ...