计算加班时长

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);

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值