有数组存在一个月的考勤对象数据,一条对象中存在日期和对应日期的进门时间或者出门,需要java代码计算一下这个月每天的工作时长,当天出进门时间-出门时间得出
时间: 2024-09-25 11:05:50 浏览: 28
在Java中,你可以创建一个`Attendance`类来表示考勤记录,包含日期、进入时间和离开时间属性。然后,你需要遍历这个数组,并对每个月的数据进行处理。这里是一个简单的示例:
```java
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
class Attendance {
private LocalDate date;
private LocalTime entranceTime;
private LocalTime exitTime;
// getters and setters...
}
public class MonthlyAttendanceCalculator {
public static void calculateWorkHours(List<Attendance> attendances) {
LocalDate currentDate = attendances.get(0).getDate(); // 获取第一个考勤的日期
double totalWorkHours = 0.0;
for (Attendance attendance : attendances) {
if (attendance.getDate().equals(currentDate)) { // 如果日期相同
long durationInMinutes = attendance.getExitTime().toSecondOfDay() - attendance.getEntranceTime().toSecondOfDay();
totalWorkHours += Math.abs(durationInMinutes / 60); // 计算并累加工作时长(忽略负数)
} else {
currentDate = attendance.getDate(); // 切换到下一个日期
System.out.println("Previous day's work hours: " + totalWorkHours);
totalWorkHours = 0; // 重置累计时长
}
}
// 输出最后一天的工作时长
System.out.println("Final day's work hours: " + totalWorkHours);
}
// 主函数用于测试
public static void main(String[] args) {
List<Attendance> attendancesData = new ArrayList<>();
// 假设你已经有了考勤数据填充列表
calculateWorkHours(attendancesData);
}
}
```
在这个例子中,我们首先获取第一个考勤日期作为当前日期。然后遍历列表,如果发现新的日期,就打印之前一天的工作时长并重置总时长。接着,我们将当前工作时长累加到`totalWorkHours`中,直到遇到下一个月。
注意,实际应用中你需要处理可能出现的异常情况,例如某些日期没有进出记录等。此外,上述代码假设工作时长是以分钟为单位,如果你想要其他单位(如小时),只需调整计算部分即可。
阅读全文