工作日和工作时间的统计维护




(暂时没有评分)工作日和每天工作时间的统计维护(顺带提供一个FLEX开发的工作日维护模块).
如果只是查询出一段时间的工作日确实有很多的方法例子可用,不过要查询出具体的工作时间:比如”2009-06-01 10:30″日到”2009-06-21 3:20″这段时间的工作时间(除去法定节假日和周末休息,并且要加上特殊的工作日,设定每天上下午上班时间,算出具体的工作时间),就比较复杂了~
这里我的想法是在算出总工作日的同时,算出第一天的工作时间,最后一天的工作时间(如果这两天是工作日的话),中间的工作日就乘默认每天的工作小时,之后三项相加就得出总的工作时间了,不过如果开始时间和结束时间在同一天又是另外一种算法了,总之比较麻烦,下面提供的一段代码是照着这样的思路来写的,不知道有没有更优化的方法。
我用FLEX+JAVA开发了一个工作日的维护模块。JAVA部分提供工作时间的算法。AS部分的com.ll19.workday.util.WorkdayGlobal是一个“接口地址配置类“。可以直接更改这里重新编译,或者用参数对应其中变量来配置这些接口地址和站点的ROOT地址。注释中有详细的说明此地址应该返回的字符流类型和具体内容以供参考~
- 演示地址 -(注意只是维护界面的演示,具体维护功能请参考接口地址配置类中的注释自行开发。) - 源码下载 -
以下为时间计算部分的代码(JAVA):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | /*** * * 得到两个时间内的工作时间和工作日 * 返回的工作日和工作时间用","相隔 * * @param startTime 前时间 yyyyMMddHHmmss * @param endTime 后时间 yyyyMMddHHmmss */ public static String getWorkDayAndTime(String startTime, String endTime) throws Exception { //可以根据以下取得当前年及结束年的工作日和节假日 //String startYear = startTime.substring(0, 4); //String endYear = endTime.substring(0, 4); // 工作日 int workDay = 0; // 工作时间 long workTime = 0; // 计算工作时间用 int workDayN = 0; // 第一天的工作时间 long workTimeStart = 0; // 最后一天的工作时间 long workTimeEnd = 0; // 默认两天休息日 0 1 2 3 4 5 6 代表 周日 周一 到周六 int holiday1 = 0; int holiday2 = 6; // 特殊的工作日和节假日 yyyyMMdd ArrayList workDayList = new ArrayList(); workDayList.add("20091009"); workDayList.add("20091010"); ArrayList holiDayList = new ArrayList(); holiDayList.add("20091001"); holiDayList.add("20091002"); holiDayList.add("20091003"); holiDayList.add("20091004"); // 默认每天工作时间 秒 int defaultWorkDayTime = 8 * 3600; // 每天工作开始结束时间 类型HHmm String ams = "8000"; String ame = "1200"; String pms = "0100"; String pme = "0500"; SimpleDateFormat myFormatter = new SimpleDateFormat("yyyyMMdd"); try { Date startDate = myFormatter.parse(startTime.substring(0, 8)); Date endDate = myFormatter.parse(endTime.substring(0, 8)); // 日历 GregorianCalendar gc = new GregorianCalendar(); // 设定日历的时间 gc.setTime(startDate); // 两个日期相差的天数 long time = endDate.getTime() - startDate.getTime(); if (time < 0) { // 如果前日期大于后日期 return "0,0"; } long day = time / 3600000 / 24 + 1; for (int i = 0; i < day; i++) { // 即每加一天比较一次是否为工作日 if (WorkTimeTools.isWeekday(gc, workDayList, holiDayList, holiday1, holiday2)) { workDay++; workDayN++; if (day == 1) { workDayN = 0; workTime = WorkTimeTools.dayTime(ams, ame, pms, pme, startTime.substring(8, 12), endTime.substring( 8, 12), "oneDay"); } else { // 计算第一天和最后一天的工作时间 if (i == 0) { workDayN--; workTimeStart = WorkTimeTools.dayTime(ams, ame, pms, pme, startTime.substring(8, 12), "", "start"); } else if (i == (day - 1)) { workDayN--; workTimeEnd = WorkTimeTools.dayTime(ams, ame, pms, pme, "", endTime.substring(8, 12), "end"); } } } // 往后加1天 gc.add(GregorianCalendar.DATE, 1); } } catch (Exception e) { e.printStackTrace(); return "0,0"; } workTime += workDayN * defaultWorkDayTime + workTimeStart + workTimeEnd; return workDay + "," + workTime; } |
Random Posts
- 工作日和工作时间的统计维护
工作日和每天工作时间的统计维护(顺带提供一个FLEX开发的工作日维护模块). 如果只是查询出一段时间的工作...
- javascript的面向对象
JS的面向对象. 所谓JS面向对象当然不会像JAVA,AS3那样的完全面向对象语言所具有继承、多态,以及接...
- 三个统计图表
三个统计图表(柱状图、饼状图、线性图)。 因为项目原因写了三个简单的统计图,效果如...
- AS3歌词同步+波谱播放器.
提供AS3同步歌词加载显示的FLASH波谱播放器源文...
这次将以前的AS2的播放器改成AS3,并且加入... - 更改自levitated.net的FLASH TAGS CLOUD(2)
var attributes_tags_c_1_1 = { id : "tags_c_1_f", nam...
- 更改自levitated.net的FLASH TAGS CLOUD(1)
续我上次以Levitated.net的源码为基础,修改并发表了一篇WP的TAGS墙~之后,这次又以其提供的开源小应用修改...

