java 判断日期是否是节假日

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));
 }

}

时间: 2024-10-29 04:01:35

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

java——判断日期是否在今天之前

这里说的日期是指字符串的日期格式,如"2014-10-15",我们要判断这个日期是否在今天之前,网上看到好多判断的方法,都是拿这个日期转换成Date对象 然后与new Date()比较,使用comparetTo()  或者before()方法,其实这样做都会有点小问题,这样做忽略了一个小时分钟的比较,会出现错误,得不到正确的结果. 如果要得到正确的结果,应该将当前时间new Date() 转换成"yyyy-MM-dd"的格式,然后在将两者转换成date进行判断,代

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

Java判断字符串是否符合yyyyMMdd日期格式 代码: /** * 判断参数的格式是否为"yyyyMMdd"格式的合法日期字符串 * */ public static boolean isValidDate(String str) { try { if (str != null && !str.equals("")) { if (str.length() == 8) { // 闰年标志 boolean isLeapYear = false; St

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

需要判定某日期是否为法定节假日,由于国家的节假日每年都在变动,所以使用接口判定是必要的.可惜的是,这样的接口并不多,在此汇总三个: http://tool.bitefu.net/jiari/ http://www.easybots.cn/holiday_api.net https://www.juhe.cn/docs/api/id/177 前两个看起来是个人的,最后一个是聚合数据的万年历接口. 在我的小项目中使用了前两个.感觉个人的搭建可能不会太稳定,但是聚合的api我看限制越来越多,每天只能进

java 判断两个时间相差的天数!

package com.datedaycha;     import java.text.SimpleDateFormat;     import java.util.Calendar;     import java.util.Date;     import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;     /*      * java 判断两个时间相差的天数     1.实现目标     输入:两

Java对日期Date类进行加减运算,年份加减,月份加减

Date d=new Date();    SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");    System.out.println("今天的日期:"+df.format(d));    System.out.println("两天前的日期:" + df.format(new Date(d.getTime() - (long)2 * 24 * 60 * 60 * 1000))); 

java处理日期时间 相加减大全

java处理日期时间 相加减 JAVA处理日期时间常用方法: 1.java.util.Calendar Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法.瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量. 例: Java代码 1. Calendar cal

Java入门——日期操作类

Java入门——日期操作类 Date类 是一个较为简单的操作类,使用java.util.Data类的构造方法并进行输出就可以得到一个完整的日期.构造方法为: public Data(); java.util包需要导入 package Sep26; import java.util.Date; public class DataDemo01 { public static void main(String[] args) { Date date=new Date(); System.out.pri

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

当你开始使用Java操作日期和时间的时候,会有一些棘手.你也许会通过System.currentTimeMillis() 来返回1970年1月1日到今天的毫秒数.或者使用Date类来操作日期:当遇到加减月份.天数的时候 你又需要用到Calendar类:当需要格式化日期的时候需要使用java.text.DateFormat类. 总而言之在Java中操作日期不是很方便,以至于很多开发者不得不使用第三方库,比如: joda-time. 现有API存在的问题 线程安全: Date和Calendar不是线

Java Date 日期 时间 相关方法

DateTools.java import java.text.SimpleDateFormat; import java.util.Date; /** * 日期操作类 */ public class DateTools { /**yyyyMMddHHmmss * * @return */ public static String getAllDate(){ SimpleDateFormat lFormat; //格式可以自己根据需要修改 lFormat = new SimpleDateForm