读取本地xlsx文件 第一列是工号 第二列是打卡时间(2022-12-12 09:08:22),注意打卡时间可能有多次,取每个工号每天最晚打卡时间减去最早打卡时间结果与最早时间和最晚时间分别输出控制台 使用java1.8 实现
时间: 2024-04-14 15:27:31 浏览: 111
你可以使用 Apache POI 库来读取本地的 xlsx 文件,并实现计算每个工号每天的最晚打卡时间减去最早打卡时间的功能。下面是一个示例代码:
```java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
public class ReadXlsxFile {
public static void main(String[] args) {
String filePath = "path/to/xlsx/file.xlsx"; // 替换为你的xlsx文件路径
try (FileInputStream fis = new FileInputStream(filePath);
Workbook workbook = new XSSFWorkbook(fis)) {
Sheet sheet = workbook.getSheetAt(0); // 假设数据在第一个工作表中
Map<String, LocalDateTime[]> employeeTimes = new HashMap<>();
for (Row row : sheet) {
Cell employeeIdCell = row.getCell(0);
Cell timestampCell = row.getCell(1);
String employeeId = employeeIdCell.getStringCellValue();
LocalDateTime timestamp = LocalDateTime.parse(timestampCell.getStringCellValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDate date = timestamp.toLocalDate();
LocalTime time = timestamp.toLocalTime();
LocalDateTime dateTime = LocalDateTime.of(date, time);
if (employeeTimes.containsKey(employeeId)) {
LocalDateTime[] times = employeeTimes.get(employeeId);
times[0] = times[0].isBefore(dateTime) ? times[0] : dateTime; // 更新最晚打卡时间
times[1] = times[1].isAfter(dateTime) ? times[1] : dateTime; // 更新最早打卡时间
} else {
employeeTimes.put(employeeId, new LocalDateTime[]{dateTime, dateTime});
}
}
for (Map.Entry<String, LocalDateTime[]> entry : employeeTimes.entrySet()) {
String employeeId = entry.getKey();
LocalDateTime[] times = entry.getValue();
LocalDateTime earliestTime = times[1];
LocalDateTime latestTime = times[0];
System.out.println("Employee ID: " + employeeId);
System.out.println("Earliest Time: " + earliestTime);
System.out.println("Latest Time: " + latestTime);
System.out.println("Time Difference: " + earliestTime.until(latestTime));
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
请将代码中的 `path/to/xlsx/file.xlsx` 替换为你的 xlsx 文件的实际路径。此代码会使用 Apache POI 库读取 xlsx 文件的每一行,将工号和对应的打卡时间提取出来,并计算每个工号每天的最晚打卡时间减去最早打卡时间,并输出到控制台。
阅读全文