package com.sqoop.common;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
/*
需求:计算正常的考勤总的加班时长(当月),正常上班时间是早上9点-下午6点
输入:(kaoqin.txt) 数据格式如下
姓名 日期 上班打卡时间 下班打卡时间 考勤是否正常
张三 2024/6/3 2024/6/3 8:11 2024/6/3 18:58 是
张三 2024/6/4 2024/6/4 8:07 2024/6/4 21:03 是
张三 2024/6/5 2024/6/5 8:11 2024/6/5 18:36 是
张三 2024/6/6 2024/6/6 8:13 2024/6/6 18:46 是
张三 2024/6/7 2024/6/7 8:13 2024/6/7 19:07 是
张三 2024/6/11 2024/6/11 8:07 2024/6/11 18:11 是
张三 2024/6/12 2024/6/12 8:12 2024/6/12 18:29 是
张三 2024/6/13 2024/6/13 8:13 2024/6/13 18:33 是
张三 2024/6/14 2024/6/14 8:10 2024/6/14 18:21 是
张三 2024/6/17 2024/6/17 8:08 2024/6/17 18:33 是
张三 2024/6/18 2024/6/18 8:07 2024/6/18 18:47 是
张三 2024/6/19 2024/6/19 8:06 2024/6/19 18:16 是
张三 2024/6/20 2024/6/20 8:13 2024/6/20 18:30 是
张三 2024/6/21 2024/6/21 8:09 2024/6/21 18:35 是
输出:
22
*/
public class WorkOvertime {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
long total = 0;
try {
FileInputStream fileInputStream = new FileInputStream("ods_etl/src/main/resources/work0624_kaoqin/kaoqin.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//正常上班时间
String benchStartWork = "09:00";
//正常下班时间
String benchEndWork = "18:00";
String line;
while ((line = bufferedReader.readLine()) != null) {
if (!line.contains("否")) {
String[] split = line.split("\\s+");
String dateWork = split[1];
String startWork = split[3];
String endWork = split[5];
//正常上班时间转时间戳
long benchStartTime = sdf.parse(dateWork + " " + benchStartWork).getTime();
//正常下班时间转时间戳
long benchEndTime = sdf.parse(dateWork + " " + benchEndWork).getTime();
//上班打卡时间转时间戳
long startTime = sdf.parse(dateWork + " " + startWork).getTime();
//下班打卡时间转时间戳
long endTime = sdf.parse(dateWrok + " " + endWork).getTime();
//计算加班时长
total += (benchStartTime - dateWork) + (endTime - benchEndTime);
}
}
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(total / 1000 / 60 / 60);
}
}
计算加班时长
最新推荐文章于 2024-07-31 19:41:07 发布