实现类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 节假日判断与配置 #### 一、引言 在开发涉及日期处理的应用时,经常会遇到需要判断某天是否为节假日的情况。对于这类需求,可以通过编写专门的类来实现,例如通过读取一个包含节假日信息的Excel文件来...
* 01-给定日期,判断是否是休息日(包含法定节假日和不需要补班的周末)。 * 02-给定日期,判断是否是工作日(非休息日)。 * 03-获取一年中总共的天数。 * 04-获取一年中法定节假日的天数。 * 05-获取一年中需要...
在IT行业中,构建一个系统来管理一年中的工作日、节假日...通过以上步骤,我们可以构建一个Java应用程序,它能够根据每年的日期信息,识别出工作日、周末和节假日,并将这些信息存储到数据库中,以供后续业务逻辑使用。
JAVA时间工具类(计算法定工作日工时):计算某个日期加上几个工作日后的一个工作日期(除周末和法定节假日),计算某个日期后一天的工作日期(除周末和法定节假日),计算两个日期的真实工作日(除周末和法定节假日),...
这种方法简单直观,但实际应用中可能需要根据具体需求进行优化,比如节假日列表的获取可以考虑从数据库或者配置文件加载。 标签“源码”表明这个解决方案可能提供了具体的Java代码实现,而“工具”可能意味着这个...
在实际应用中,可能需要考虑周末和节假日。我们可以扩展这个函数,接受一个额外的参数表示当前是星期几,并基于这个信息调整工作时间: ```java public boolean isWorkingTime(LocalTime time, DayOfWeek dayOfWeek...
4. **节假日和节气**:节假日和节气的处理需要一个节假日数据库,这可能需要从网络获取或者手动维护。同时,中国的二十四节气可以通过天文算法计算得出。 5. **用户界面设计**:Java Swing或JavaFX可以用来构建用户...
在"计算N个工作日后的日期"这个场景中,"每年的节假日需要手动配置"意味着开发者需要维护一个包含特定年份假期的列表。这可能是一个数组、集合或自定义的数据结构,用来存储特定日期,如春节、国庆节等。在Java中,...
6. **可配置性**: 提供配置选项,允许用户设置日历的外观(如颜色、字体)、显示模式(单月、双月、多月)以及是否显示周末、节假日等。 7. **数据绑定**: 如果控件需要与应用程序的其他部分交互,例如保存或加载...
5. **文件操作**:如果程序需要保存用户的定制信息或历史记录,就需要涉及文件读写,如读取配置文件,保存用户的自定义节假日等。 6. **错误处理**:良好的编程实践中,需要考虑异常处理,例如日期输入错误、文件...
- **展望**:未来可扩展功能包括节假日标注、重要事件提醒等,使其成为更加实用的日历工具。 综上所述,《Java万年历-大创项目》是一项结合了理论学习与实践操作的综合性项目,对于提升学生的综合能力和激发其创新...
在软件开发中,尤其是涉及到国际化和本地化应用时,了解并正确处理各国的节假日信息是至关重要的。"de_holidays"是一个专为Java 8设计的库,它提供了一个方便的方式来获取和管理德国的公共假期。本文将深入探讨这个...
同时,还涉及到计算工作日,排除法定节假日、周六和周日的业务逻辑。 首先,我们需要理解SpringMVC的文件上传机制。在SpringMVC中,文件上传是通过`@RequestParam`注解配合`MultipartFile`类实现的。例如,一个表单...
开发者可能已经实现了特定的日历功能,如节假日计算、闰年判断、时区转换等。通过阅读和分析这些源代码,我们可以学习到如何在实际项目中有效地使用`java.util.Calendar`类,以及如何组织和结构化一个Java项目。 ...
这在处理时间敏感的业务逻辑时非常有用,比如工作日的工作时间、节假日规则、预约系统等。 首先,我们需要了解如何创建一个自定义的drools日历。你可以通过继承 `org.drools.core.time.Calendar` 类并覆盖其 `...
开发者需要编写代码来计算月份、日期的增减,以及判断日期是否为周末、节假日等。 4. **系统日历API**:Android提供了`android.provider.CalendarContract`来访问和修改系统日历数据。这包括添加、删除、查询事件,...
2. 考勤统计模块:此模块负责根据打卡记录生成考勤报告,可能涉及时间窗口计算、节假日规则处理等。源代码可能会使用循环和条件判断,来计算迟到、早退、缺勤等状况。 3. 异常处理模块:面对各种可能的异常情况,如...
1. **布局设计**:设计一个符合需求的日历布局,通常包括月份标题、日期格子以及可能的特殊标记(如节假日或个人事件)。这通常需要用到LinearLayout、RelativeLayout或ConstraintLayout等布局容器,结合TextView、...
5. **时间与日期处理**:打卡功能涉及时间戳、日期范围判断、节假日排除等,开发者需要熟练处理JavaScript中的Date对象,进行时间比较、格式化以及计算工作日等功能。 6. **定时任务与提醒**:为了实现自动打卡提醒...
源代码中可能包含处理时区、工作日、节假日的逻辑,以及计算工作小时的方法。 7. **通知与提醒**:系统可能有自动发送考勤提醒或通知的功能,如未签到提醒、请假审批结果通知等,这需要集成邮件服务或消息推送服务...