- 浏览: 149332 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
vipbooks:
ioandy 写道首先感谢作者!使用中发现一个问题,就是生成j ...
基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v5.8.8版) -
ioandy:
首先感谢作者!使用中发现一个问题,就是生成javabean的时 ...
基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v5.8.8版) -
suncong1024:
不错不错,很好用
基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版) -
vipbooks:
敲可爱的小花花世界上只有一个 写道不错不错、继续支持、哈哈,谢 ...
基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v5.8.0版) -
敲可爱的小花花世界上只有一个:
不错不错、继续支持、
基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v5.8.0版)
现在公司改革了,早退要扣一天的工资,如果上班或下班没有打卡要扣三天的工资,坑爹啊!还好人事会把指纹打卡记录的Excel发邮件给我们,如果发现有不对就马上去沟通,想办法解决,不然一天几百块伤不起啊!
这是公司的给我们发打卡记录(Excel):
找到自己的名字,把“对应时段”、“上班时间”、“下班时间”这三个列删除,然后把“日期”、“签到时间”、“签退时间”三个列的内容复制到“TimeTable.txt”中。
TimeTable.txt文件内容如下:
2012-9-3 08:46 19:29
2012-9-4 08:53 18:34
2012-9-5 08:29 18:27
2012-9-6 08:45 18:26
2012-9-7 09:05 18:40
2012-9-8 10:40 14:22
2012-9-9
2012-9-10 08:50 18:42
2012-9-11 08:45 18:10
2012-9-12 08:43 18:31
2012-9-13 08:40 18:49
2012-9-14 08:33 19:23
2012-9-15
2012-9-16
2012-9-17 08:46 18:31
2012-9-18 08:42 20:53
2012-9-19 08:48 18:57
2012-9-20 08:38 18:39
2012-9-21 08:35
2012-9-22
2012-9-23
2012-9-24 18:39
执行程序运行后的效果如图:
CMD窗口需调整一下宽和高:
Java的原代码如下:
我打包好的Jar、EXE、源代码(在Jar包里)都放在这里了,大家可以下载以后可以根据自己需求进行修改、希望对大家有些帮助!
这是公司的给我们发打卡记录(Excel):
找到自己的名字,把“对应时段”、“上班时间”、“下班时间”这三个列删除,然后把“日期”、“签到时间”、“签退时间”三个列的内容复制到“TimeTable.txt”中。
TimeTable.txt文件内容如下:
2012-9-3 08:46 19:29
2012-9-4 08:53 18:34
2012-9-5 08:29 18:27
2012-9-6 08:45 18:26
2012-9-7 09:05 18:40
2012-9-8 10:40 14:22
2012-9-9
2012-9-10 08:50 18:42
2012-9-11 08:45 18:10
2012-9-12 08:43 18:31
2012-9-13 08:40 18:49
2012-9-14 08:33 19:23
2012-9-15
2012-9-16
2012-9-17 08:46 18:31
2012-9-18 08:42 20:53
2012-9-19 08:48 18:57
2012-9-20 08:38 18:39
2012-9-21 08:35
2012-9-22
2012-9-23
2012-9-24 18:39
执行程序运行后的效果如图:
CMD窗口需调整一下宽和高:
Java的原代码如下:
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 计算上班时间,检查是否迟到早退,有没有打卡 * * @author vipbooks * @version 1.0.0 2012-9-19 */ @SuppressWarnings("unchecked") public class ComputeJobTime { // 文件名 private static String fileName = "TimeTable.txt"; // 文件路径 private static String filePath; // 读取出来的文件 private static File file; // 休息时间90分钟 private static long reposeTime = (60 + 30) * 60 * 1000; // 八小时工作制 private static int workTime = 8; private static SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd"); private static SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm"); private static final String EMPTY_STR = ""; private static final String FALSE_STR = "false"; private static final String TRUE_STR = "true"; private static final String TABLE_STR = "\t"; /** * 初始化TimeTable.txt文件 */ static{ filePath = ComputeJobTime.class.getResource(fileName).getPath(); try { // 防止中文乱码 filePath = URLDecoder.decode(filePath, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } file = new File(filePath); } /** * 计算工作时间 */ private static void computeTime() throws Exception { // 检查文件是否存在 if (file.exists()) { // 计算好的记录集 List<Map<Enum, String>> list = new ArrayList<Map<Enum,String>>(); // 计算好的一条记录 Map<Enum, String> map = null; // 读取文件 InputStream is = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); // 一行记录 String line = null; while ((line = br.readLine()) != null) { // 是否是周未 boolean isWeekend = false; // 日期 Date date = null; // 开始时间 Date startDate = null; // 结束时间 Date endDate = null; map = new HashMap<Enum, String>(); // 开始时间 map.put(Constant.START_TIME, EMPTY_STR); // 结束时间 map.put(Constant.END_CARD, EMPTY_STR); // 工作时间 map.put(Constant.JOB_TIME, EMPTY_STR); // 是否迟到 map.put(Constant.LATE, FALSE_STR); // 是否早退 map.put(Constant.EARLY, FALSE_STR); // 上班是否打卡 map.put(Constant.START_CARD, TRUE_STR); // 下班是否打卡 map.put(Constant.END_CARD, TRUE_STR); int index = line.indexOf(" "); if (index < 8) { continue; } // 获得日期 String dateStr = line.substring(0,index).trim(); map.put(Constant.DATE, dateStr); // 获得周 date = sdfDate.parse(dateStr); String week = getWeek(date); map.put(Constant.WEEK, week); if (week.equals(Week.SUNDAY.toString()) || week.equals(Week.SATURDAY.toString())) { isWeekend = true; } line = line.substring(index,line.length()); // 上班时间字符串 String t1 = line.substring(0,6).trim(); // 下班时间字符串 String t2 = ""; /** * 获得上班时间和下班时间的字符串,并判断上下班是否打卡 */ if (t1.length() < 2) { map.put(Constant.START_CARD, FALSE_STR); t2 = line.trim(); if (t2.length() < 2) { map.put(Constant.END_CARD, FALSE_STR); } } else { line = line.trim(); index = line.indexOf(" "); if (index < 1) { t1 = line.trim(); map.put(Constant.END_CARD, FALSE_STR); } else { t1 = line.substring(0,index).trim(); t2 = line.substring(index,line.length()).trim(); } } map.put(Constant.START_TIME, t1); map.put(Constant.END_TIME, t2); /** * 如果上班时间和下班时间都为空则跳过该循环 */ if (t1.length() < 2 && t2.length() < 2) { list.add(map); continue; } /** * 获得上班时间,并判断是否迟到 */ if (t1.length() > 2) { String[] strs = t1.split(":"); if (strs.length == 2) { int hour = Integer.valueOf(strs[0]); int min = Integer.valueOf(strs[1]); if (hour > 8 && min > 0) { if (!isWeekend) { map.put(Constant.LATE, TRUE_STR); } } startDate = sdfTime.parse(t1); } } /** * 获得下班时间 */ if (t2.length() > 2) { String[] strs = t2.split(":"); if (strs.length == 2) { endDate = sdfTime.parse(t2); } } /** * 获得总工作时间,并判断是否早退 */ if (endDate != null && startDate != null) { long[] diff = timeDifference(startDate, endDate); if (diff[0] < workTime) { if (!isWeekend) { map.put(Constant.EARLY, TRUE_STR); } } map.put(Constant.JOB_TIME, (diff[0]<10?"0"+diff[0]:diff[0]) + ":" + (diff[1]<10?"0"+diff[1]:diff[1])); } list.add(map); } br.close(); isr.close(); is.close(); System.out.println("日期\t\t周期\t上班时间\t下班时间\t工作时间\t是否迟到\t是否早退\t上班打卡\t下班打卡"); for (Map<Enum, String> result : list) { System.out.print(result.get(Constant.DATE) + TABLE_STR); System.out.print(result.get(Constant.WEEK) + TABLE_STR); System.out.print(result.get(Constant.START_TIME) + TABLE_STR); System.out.print(result.get(Constant.END_TIME) + TABLE_STR); System.out.print(result.get(Constant.JOB_TIME) + TABLE_STR); System.out.print(result.get(Constant.LATE) + TABLE_STR); System.out.print(result.get(Constant.EARLY) + TABLE_STR); System.out.print(result.get(Constant.START_CARD) + TABLE_STR); System.out.print(result.get(Constant.END_CARD) + TABLE_STR); if (result.get(Constant.WEEK).equals(Week.SUNDAY.toString())) { System.out.println(); } System.out.println(); } } else { System.out.println("TimeTable.txt文件不存在!"); } } /** * 求时间差 * * @param startDate * 开始时间 * @param endDate * 结束时间 * @return long[时,分] */ private static long[] timeDifference(Date startDate,Date endDate){ long diff = endDate.getTime() - startDate.getTime(); diff = diff - reposeTime; long hour = (diff / (60 * 60 * 1000)); long min = ((diff / (60 * 1000)) - hour * 60); return new long[] { hour, min }; } /** * 获得当前日期是星期几 * * @param date * @return */ private static String getWeek(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); String weekStr = null; int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; switch (week) { case 0: weekStr = Week.SUNDAY.toString(); break; case 1: weekStr = Week.MONDAY.toString(); break; case 2: weekStr = Week.TUESDAY.toString(); break; case 3: weekStr = Week.WEDNESDAY.toString(); break; case 4: weekStr = Week.THURSDAY.toString(); break; case 5: weekStr = Week.FRIDAY.toString(); break; case 6: weekStr = Week.SATURDAY.toString(); break; } return weekStr; } /** * 周枚举 */ private enum Week{ MONDAY(1,"星期一"),TUESDAY(2,"星期二"),WEDNESDAY(3,"星期三"), THURSDAY(4,"星期四"),FRIDAY(5,"星期五"),SATURDAY(6,"星期六"),SUNDAY(0,"星期日"); // 编码 private int code; // 名称 private String name; private Week(int code,String name){ this.code = code; this.name = name; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return name; } } /** * 常量枚举 */ private enum Constant { /** 日期 */ DATE, /** 周 */ WEEK, /** 开始时间 */ START_TIME, /** 结束时间 */ END_TIME, /** 工作时间 */ JOB_TIME, /** 是否迟到 */ LATE, /** 是否早退 */ EARLY, /** 上班是否打卡 */ START_CARD, /** 下班是否打卡 */ END_CARD } public static void main(String[] args) throws Exception{ long beginTime = System.currentTimeMillis(); computeTime(); long endTime = System.currentTimeMillis(); System.out.println("\n共耗时" + (endTime - beginTime) + "毫秒!"); } }
我打包好的Jar、EXE、源代码(在Jar包里)都放在这里了,大家可以下载以后可以根据自己需求进行修改、希望对大家有些帮助!
评论
8 楼
zhangmengLOVE_007
2012-11-19
要是添加倒班能不能啊?
7 楼
zhaoyou
2012-10-15
换公司吧, 不过你闲的有时间写个程序, 估计你也不会迟到了.
6 楼
vipbooks
2012-10-10
哈哈,是民企啊,香香港上市,国企应该可以不打卡吧!
用VBA是也可以,而且也很方便!
我是想复习一下枚举,还有把jar打包成EXE!
而且用EXE很方便的,送给MM用最好啦,简单实用,一点就会!
用VBA是也可以,而且也很方便!
我是想复习一下枚举,还有把jar打包成EXE!
而且用EXE很方便的,送给MM用最好啦,简单实用,一点就会!
5 楼
datawarehouse
2012-10-10
有点夸张了吧
4 楼
flysheet
2012-10-10
这是国企吗,太坑爹了,还是不打卡爽?
3 楼
daaoke
2012-10-10
vba也不错。。难道LZ只会JAVA...悲哉。
2 楼
tonly85
2012-10-10
何苦呢,Excel的Formula完全可以实现的
1 楼
cesia1984
2012-10-10
excel里直接判断也行嘛
发表评论
-
Redis客户端Java服务接口封装
2016-03-03 19:32 5210最近在学习R ... -
操作日期和时间的工具类
2010-10-28 16:59 1786大家好啊,好久没有来这里发文章了,今天来逛逛,分享一篇刚 ... -
将数据库字段转换成设计文档所需的字段
2010-04-30 14:50 1584哈哈,出差这么久终于回来了,回家的感觉真好! ... -
用于读写Properties属性配制文件的通用类
2010-03-03 19:44 2353哈哈,好久没有来了,这段时间在武汉出差,所以都没有什么时 ... -
自己在项目开发中整理的工具类,希望对大家有用
2010-02-10 14:27 1455这是我在做Java的项目开发过程中整理的一个单例的完整工具 ...
相关推荐
公司迟到早退管理制度是企业管理的重要组成部分,主要目的是规范员工行为,提高工作效率,创造良好的工作环境。这份制度适用于公司的全体工作人员。 首先,制度中定义了迟到和早退的标准。迟到是指在规定的上班时间...
本制度详细规定了员工的上下班时间、打卡规则、加班政策、漏卡补卡流程、迟到早退及旷工的处理、全勤奖的设定以及假期请休假的管理。 一、上班时间和打卡规定 1. 上班时间通常为周一至周五的08:00-12:00和13:30-17...
6. 旷工处理:无故迟到、早退30分钟以上或未上班被视为旷工。旷工半天扣一天工资,一天旷工扣三天工资。连续旷工三天或以上视为自动离职,扣除所有未发工资。 7. 加班规定:接到加班通知或工作命令的员工应配合加班...
迟到、早退有不同的扣款标准,迟到1-10分钟扣月基本工资10%,以此类推。频繁迟到、早退会影响评优和调薪资格。迟到、早退超过一定时间将按旷工处理。 7. 病假: 一天以上病假需提供镇级以上医院的证明并经园领导...
迟到5分钟以上会被视为迟到,不同时间段的迟到会有不同的扣薪标准,严重者按旷工处理。同样,未经批准的早退也会有相应的扣薪措施。旷工不仅会扣薪,连续或累计旷工达到一定天数,可能会面临解雇。员工外出办理业务...
- 考勤制度:员工需要按时打卡,迟到、早退和旷工都有明确的扣薪规定,频繁的迟到早退会被视为旷工处理。 - 请假制度:包括病假和事假,需提前申请,病假需提供医疗证明,事假期间无工资。请假审批权限根据请假...
这份文档详细列出了考勤管理的各项规则,包括打卡制度、迟到早退的处理、旷工定义以及请休假管理等。 首先,考勤工作由主管负责,包括制度解释、执行情况检查、分析和管理工作。考勤内容涵盖出勤、迟到、早退、旷工...
同时,可能还涉及到时间管理算法,用于计算迟到、早退等情况,并自动生成考勤报表供管理层参考。 二、薪资计算模块 薪资计算模块处理员工的工资发放,包括基本工资、奖金、扣款、福利等各项收入和支出。源码可能...
这套规则旨在明确员工的上下班时间、打卡规定、迟到早退的处理方式以及请假制度等,以保障公司的运营效率和员工的权益。 1. **上下班时间与打卡制度**:员工的正常工作时间通常设定为上午8:30至10:00,下午1:30至5:...
2. 迟到而不打卡被视为旷工处理。例如,员工迟到后未打卡,但在下班时打卡,会被视为旷工。 3. 考勤人员包庇他人未打卡或篡改考勤信息会受到罚款。 4. 因公外出或公务原因未打卡的员工需在规定时间内补办手续,并由...
迟到早退的罚款和计算方式也有明确标准。严禁代打卡,否则将受到严重处分。加班、病假、事假等特殊情况的处理也有详细规定。 总之,这份考勤制度明确了员工的职责、出勤规定、请假流程、迟到早退的惩罚以及考勤记录...
通过严格的考勤管理,可以有效地监控员工出勤情况,防止滥用假期和迟到早退现象,同时也能激励员工按时出勤,提高工作积极性。此外,它还提供了一个公平的考核标准,对违反规定的员工进行相应的奖惩,有利于维护公司...
此外,公司对各种假期的扣款也有明确规定,例如事假、病假、迟到早退、欠班和旷工等,都有相应的薪资扣除标准。 在给假制度上,未经请假或未办理请假手续的缺勤被视为旷工,连续旷工3天或月累计6天将被开除,试用期...
迟到是指在规定上班时间后到岗,早退则是提前下班,未经批准的离岗则被视为擅离职守。旷工包括未请假、请假未获批准或未按时报到等情况。 权限管理方面,人力资源部负责钉钉系统的维护、权限管理以及考勤的日常管理...
例如,迟到10分钟以上可能被视为旷工,早退也会受到相应扣款。考虑到交通状况,每月有2次10分钟内的迟到豁免,超出部分则罚款。 忘打卡的情况需在规定时间内申请补卡,每月不超过3次,否则会有罚款。补卡需经过上级...
首先,员工上下班需严格按照作息时间进行,迟到和早退都有明确的规定。迟到3分钟至15分钟视为迟到,超过15分钟则被视为旷工;早退则一律视为旷工半天。对于迟到,公司采取逐次加重的惩罚措施,以当月为周期,首次...
- 无故旷工半天者将受到警告,每月累计3天旷工扣当月工资并记过,连续一周旷工者将被解雇。 4. **病假**: - 一天内的病假最迟在次日申请,连续病假一天以上需提供公立医院的就医证明。 - 全年病假累计不超过30...
迟到、早退累积达到一定次数会扣减工资,旷工则按照上班时间的两倍计算扣款。同时,连续旷工或累计旷工达到一定程度,将影响员工的奖金和职务晋升。 3. 脱岗行为也将受到不同程度的工资扣除,严重者可能按旷工处理。...