java 传入一个date类型日期 从数据库中获取节假日 判断日期是否为工作日 排除 节假日和调休 且如果为工作日则往前推进 一天 直到为工作日 包含数据库表sql
时间: 2024-05-12 13:19:07 浏览: 65
首先,需要从数据库中获取所有的节假日和调休日期。这可以通过执行以下SQL语句来实现:
```
SELECT holiday_date FROM holiday_table;
```
假设从Java中传入的日期为`inputDate`,则可以编写如下代码来判断该日期是否为工作日:
```
Calendar cal = Calendar.getInstance();
cal.setTime(inputDate);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
// 周六和周日为非工作日
return false;
}
// 判断是否为节假日或调休
String sql = "SELECT COUNT(*) FROM holiday_table WHERE holiday_date = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setDate(1, new java.sql.Date(inputDate.getTime()));
ResultSet rs = ps.executeQuery();
rs.next();
int count = rs.getInt(1);
if (count > 0) {
// 是节假日或调休
return false;
}
// 是工作日
return true;
```
如果日期为工作日,则需要往前推进一天,直到找到一个工作日。可以使用如下代码来实现:
```
while (!isWorkingDay(cal.getTime(), conn)) {
cal.add(Calendar.DATE, -1);
}
return cal.getTime();
```
完整的代码如下所示:
```
public Date getNextWorkingDay(Date inputDate, Connection conn) throws SQLException {
Calendar cal = Calendar.getInstance();
cal.setTime(inputDate);
// 往前推进至工作日
while (!isWorkingDay(cal.getTime(), conn)) {
cal.add(Calendar.DATE, -1);
}
// 返回下一个工作日
cal.add(Calendar.DATE, 1);
while (!isWorkingDay(cal.getTime(), conn)) {
cal.add(Calendar.DATE, 1);
}
return cal.getTime();
}
private boolean isWorkingDay(Date date, Connection conn) throws SQLException {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
// 周六和周日为非工作日
return false;
}
// 判断是否为节假日或调休
String sql = "SELECT COUNT(*) FROM holiday_table WHERE holiday_date = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setDate(1, new java.sql.Date(date.getTime()));
ResultSet rs = ps.executeQuery();
rs.next();
int count = rs.getInt(1);
if (count > 0) {
// 是节假日或调休
return false;
}
// 是工作日
return true;
}
```
阅读全文