有两个数组,perList中存储人员id的对象,dataList中存储所有人一个月的考勤对象数据, dataList中每一条对象中都存在人员id,日期,时间,和进出门状态,需要java代码计算一下每人每天的工作时长, 计算方式是 当天最早进门时间-减去当天出门时间得出
时间: 2024-09-25 20:05:52 浏览: 34
为了计算每个员工每天的工作时长,你可以按照以下步骤在Java中编写代码:
首先,假设`PersonId`是人员ID的简单类,`Attendance`是包含人员ID、日期、时间和进出状态的类。你需要创建一个辅助方法来获取一天内的工作时长,并遍历两个列表。
```java
import java.time.LocalDate;
import java.time.LocalTime;
class PersonId {
// 假设这里只有一条属性,如int id
}
class Attendance {
private PersonId personId;
private LocalDate date;
private LocalTime entryTime;
private LocalTime exitTime;
// getters and setters...
}
public class WorkHoursCalculator {
public static void calculateWorkHours(PerList perList, dataList) {
for (PersonId personId : perList) {
List<Attendance> personData = dataList.stream()
.filter(a -> a.getPersonId().getId() == personId.getId())
.collect(Collectors.toList());
if (!personData.isEmpty()) {
Map<LocalDate, Long> dailyWorkTimes = new HashMap<>();
for (Attendance a : personData) {
LocalDate currentDate = a.getDate();
LocalTime workStart = a.getEntryTime();
LocalTime workEnd = a.getExitTime();
if (!dailyWorkTimes.containsKey(currentDate)) {
dailyWorkTimes.put(currentDate, workStart);
} else {
workStart = dailyWorkTimes.get(currentDate).isBefore(workStart)
? dailyWorkTimes.get(currentDate)
: workStart;
}
dailyWorkTimes.put(currentDate, workEnd.isAfter(workStart) ? workEnd : workStart);
}
for (Map.Entry<LocalDate, LocalTime> entry : dailyWorkTimes.entrySet()) {
long workHour = entry.getValue().toSecondOfDay();
System.out.printf("Employee ID %d: On %s, worked %d hours%n", personId.getId(), entry.getKey(), workHour);
}
} else {
System.out.println("No attendance data found for employee ID " + personId.getId());
}
}
}
}
```
在这个例子中,我们首先通过人员ID过滤出每个员工的数据,然后找出每一天的工作开始时间和结束时间。如果有多个时间段,我们取最早进入和最晚离开的时间作为当天的工作时间。最后,将结果打印出来。
阅读全文