Java计算工作时间:排除节假日与周末
版权申诉
5星 · 超过95%的资源 17 浏览量
更新于2024-09-13
收藏 74KB PDF 举报
"Java编程实现计算工作时间,剔除节假日和周末的功能。"
在Java编程中,有时我们需要计算员工的工作时间,但这并不简单,因为我们需要排除周末和法定节假日。以下是一个示例,演示如何在Java中实现这个功能。首先,我们创建一个名为`CalculateHours`的类,并引入必要的日期和时间处理类,如`Calendar`,`DateFormat`和`Date`。
```java
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
public class CalculateHours {
// ...
}
```
在这个类中,我们定义了一些常量来表示工作日的上下班时间。例如,`abh`和`abm`分别代表上午的上班小时和分钟,`peh`和`pem`则表示下午的下班小时和分钟。此外,我们还计算出每天和每周的工作小时数。
```java
int abh = 9; // 上午上班时间,小时
int abm = 00; // 上午上班时间,分钟
int aeh = 12; // 上午下班时间,小时
int aem = 0; // 上午下班时间,分钟
int pbh = 13; // 下午上班时间,小时
int pbm = 00; // 下午上班时间,分钟
int peh = 18; // 下午下班时间,小时
int pem = 0; // 下午下班时间,分钟
float h1 = abh + (float) abm / 60;
float h2 = aeh + (float) aem / 60;
float h3 = pbh + (float) pbm / 60;
float h4 = peh + (float) pem / 60;
float hoursPerDay = h2 - h1 + (h4 - h3); // 每天上班小时数
int daysPerWeek = 5; // 每周工作天数
long milsecPerDay = 1000 * 60 * 60 * 24; // 每天的毫秒数
float hoursPerWeek = hoursPerDay * daysPerWeek; // 每星期小时数
```
接下来,我们需要一个方法来计算两个日期之间的有效工作小时数。这个方法接受两个字符串参数,分别代表开始时间和结束时间。
```java
public float calculateHours(String beginTime, String endTime) {
// ...
}
```
在这个方法中,我们需要解析输入的时间字符串,将其转换为`Date`对象,然后使用`Calendar`来处理日期和时间的计算。首先,我们定义一个`SimpleDateFormat`对象来格式化时间字符串。
```java
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 这里的格式可以自己设置
```
接着,我们解析开始时间和结束时间,并创建相应的`Date`对象。
```java
Date startDate;
Date endDate;
try {
startDate = format.parse(beginTime);
endDate = format.parse(endTime);
} catch (ParseException e) {
e.printStackTrace();
return 0; // 错误处理,无法解析时间
}
```
为了排除节假日和周末,我们需要遍历这段时间内的所有日期,并检查每个日期是否是工作日。这可以通过获取每个日期的`Calendar.DAY_OF_WEEK`字段来实现。工作日通常为1(周一)到5(周五)。我们可以使用`List`来存储工作日,然后计算这些日期的工作小时数。
```java
List<Date> workDays = new LinkedList<>();
Calendar startCal = Calendar.getInstance();
startCal.setTime(startDate);
Calendar endCal = Calendar.getInstance();
endCal.setTime(endTime);
while (!startCal.after(endCal)) {
int dayOfWeek = startCal.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek >= 1 && dayOfWeek <= 5) { // 假设1-5为工作日
workDays.add(startCal.getTime());
}
startCal.add(Calendar.DAY_OF_MONTH, 1);
}
float totalWorkHours = 0;
for (Date workDay : workDays) {
// 计算每个工作日的工作小时数,并累加到totalWorkHours
// ...
}
return totalWorkHours;
```
最后,我们需要计算每个工作日的工作小时数,并将它们累加到`totalWorkHours`。这可能需要进一步细化,根据上班和下班时间来计算。如果一天跨越了多个工作日,还需要考虑跨日的情况。具体实现会比较复杂,需要考虑到各种边界条件。
总结来说,这个Java代码示例提供了一个基础框架,用于计算两个日期之间排除节假日和周末的工作时间。实际应用中,可能需要扩展这个功能,比如添加对节假日的处理,或者更精确地计算跨日的工作时间。这个类还可以进一步优化,例如通过使用`LocalDateTime`和`DayOfWeek`等Java 8的新特性,以提高代码的可读性和效率。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-06-08 上传
2023-06-08 上传
2023-06-08 上传
2019-03-20 上传
weixin_38688550
- 粉丝: 7
- 资源: 912
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析