`
120153216
  • 浏览: 62006 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

JAVA 节假日 判断和配置

    博客分类:
  • java
 
阅读更多
JAVA 节假日 判断和配置

实现类Festival.java,配置文件WEB-INF/节假日.xls 需POI包支持poi-2.5.1-final-20040804.jar
节假日.xls

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
   Festival f = new Festival();
   Date dt = f.getDate("2009-09-26");
   System.out.println(f.isWorkDay(dt));
}

}

 

分享到:
评论

相关推荐

    JAVA 节假日 判断和配置.docx

    ### JAVA 节假日判断与配置 #### 一、引言 在开发涉及日期处理的应用时,经常会遇到需要判断某天是否为节假日的情况。对于这类需求,可以通过编写专门的类来实现,例如通过读取一个包含节假日信息的Excel文件来...

    java获取当年的法定节假日和工作日等信息

    * 01-给定日期,判断是否是休息日(包含法定节假日和不需要补班的周末)。 * 02-给定日期,判断是否是工作日(非休息日)。 * 03-获取一年中总共的天数。 * 04-获取一年中法定节假日的天数。 * 05-获取一年中需要...

    Java 实现将每年的节假日,周末,工作日详情记录至数据库表中

    在IT行业中,构建一个系统来管理一年中的工作日、节假日...通过以上步骤,我们可以构建一个Java应用程序,它能够根据每年的日期信息,识别出工作日、周末和节假日,并将这些信息存储到数据库中,以供后续业务逻辑使用。

    JAVA时间工具类(计算法定工作日工时等)

    JAVA时间工具类(计算法定工作日工时):计算某个日期加上几个工作日后的一个工作日期(除周末和法定节假日),计算某个日期后一天的工作日期(除周末和法定节假日),计算两个日期的真实工作日(除周末和法定节假日),...

    java得到下一个法定工作日期

    这种方法简单直观,但实际应用中可能需要根据具体需求进行优化,比如节假日列表的获取可以考虑从数据库或者配置文件加载。 标签“源码”表明这个解决方案可能提供了具体的Java代码实现,而“工具”可能意味着这个...

    java代码-判断时间是否工作时间

    在实际应用中,可能需要考虑周末和节假日。我们可以扩展这个函数,接受一个额外的参数表示当前是星期几,并基于这个信息调整工作时间: ```java public boolean isWorkingTime(LocalTime time, DayOfWeek dayOfWeek...

    纯java开发的万年历

    4. **节假日和节气**:节假日和节气的处理需要一个节假日数据库,这可能需要从网络获取或者手动维护。同时,中国的二十四节气可以通过天文算法计算得出。 5. **用户界面设计**:Java Swing或JavaFX可以用来构建用户...

    workdaycalculate.zip

    在"计算N个工作日后的日期"这个场景中,"每年的节假日需要手动配置"意味着开发者需要维护一个包含特定年份假期的列表。这可能是一个数组、集合或自定义的数据结构,用来存储特定日期,如春节、国庆节等。在Java中,...

    基于java的日历控件 Click Calendar.zip

    6. **可配置性**: 提供配置选项,允许用户设置日历的外观(如颜色、字体)、显示模式(单月、双月、多月)以及是否显示周末、节假日等。 7. **数据绑定**: 如果控件需要与应用程序的其他部分交互,例如保存或加载...

    华中科技大学白云黄鹤站万年历(代码)

    5. **文件操作**:如果程序需要保存用户的定制信息或历史记录,就需要涉及文件读写,如读取配置文件,保存用户的自定义节假日等。 6. **错误处理**:良好的编程实践中,需要考虑异常处理,例如日期输入错误、文件...

    【Java万年历-大创项目】-2024年立项的国家级大创项目

    - **展望**:未来可扩展功能包括节假日标注、重要事件提醒等,使其成为更加实用的日历工具。 综上所述,《Java万年历-大创项目》是一项结合了理论学习与实践操作的综合性项目,对于提升学生的综合能力和激发其创新...

    de_holidays:兼容Java 8的德国假期日历

    在软件开发中,尤其是涉及到国际化和本地化应用时,了解并正确处理各国的节假日信息是至关重要的。"de_holidays"是一个专为Java 8设计的库,它提供了一个方便的方式来获取和管理德国的公共假期。本文将深入探讨这个...

    SpringMVC上传

    同时,还涉及到计算工作日,排除法定节假日、周六和周日的业务逻辑。 首先,我们需要理解SpringMVC的文件上传机制。在SpringMVC中,文件上传是通过`@RequestParam`注解配合`MultipartFile`类实现的。例如,一个表单...

    calendar-source-code.rar_Java编程_Java_

    开发者可能已经实现了特定的日历功能,如节假日计算、闰年判断、时区转换等。通过阅读和分析这些源代码,我们可以学习到如何在实际项目中有效地使用`java.util.Calendar`类,以及如何组织和结构化一个Java项目。 ...

    drools calendar 使用demo

    这在处理时间敏感的业务逻辑时非常有用,比如工作日的工作时间、节假日规则、预约系统等。 首先,我们需要了解如何创建一个自定义的drools日历。你可以通过继承 `org.drools.core.time.Calendar` 类并覆盖其 `...

    android日历代码

    开发者需要编写代码来计算月份、日期的增减,以及判断日期是否为周末、节假日等。 4. **系统日历API**:Android提供了`android.provider.CalendarContract`来访问和修改系统日历数据。这包括添加、删除、查询事件,...

    kaoqin .rarkaoqin .rarkaoqin .rarkaoqin .rarkaoqin .rarkaoqin .rar

    2. 考勤统计模块:此模块负责根据打卡记录生成考勤报告,可能涉及时间窗口计算、节假日规则处理等。源代码可能会使用循环和条件判断,来计算迟到、早退、缺勤等状况。 3. 异常处理模块:面对各种可能的异常情况,如...

    Android自定义日历

    1. **布局设计**:设计一个符合需求的日历布局,通常包括月份标题、日期格子以及可能的特殊标记(如节假日或个人事件)。这通常需要用到LinearLayout、RelativeLayout或ConstraintLayout等布局容器,结合TextView、...

    打卡小程序源码.zip

    5. **时间与日期处理**:打卡功能涉及时间戳、日期范围判断、节假日排除等,开发者需要熟练处理JavaScript中的Date对象,进行时间比较、格式化以及计算工作日等功能。 6. **定时任务与提醒**:为了实现自动打卡提醒...

    企业考勤源代码.zip

    源代码中可能包含处理时区、工作日、节假日的逻辑,以及计算工作小时的方法。 7. **通知与提醒**:系统可能有自动发送考勤提醒或通知的功能,如未签到提醒、请假审批结果通知等,这需要集成邮件服务或消息推送服务...

Global site tag (gtag.js) - Google Analytics