工作日和工作时间的统计维护
工作日和每天工作时间的统计维护(顺带提供一个FLEX开发的工作日维护模块).
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 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | /** * - GL'19. - * * 工作时间工具类 * * @author <a href="http://www.LL19.com/">LL19.com</a> * @version 1.0 */ public class WorkTimeTools { /** * @title 判断是否为工作日 * @detail 工作日计算: 1、正常工作日,并且为非假期 2、周末被调整成工作日 * @param date * 日期 * @return 是工作日返回true,非工作日返回false */ public static boolean isWeekday(GregorianCalendar calendar, ArrayList workDayList, ArrayList holiDayList, int holiday1, int holiday2) throws Exception { SimpleDateFormat myFormatter = new SimpleDateFormat("yyyyMMdd"); if (calendar.get(GregorianCalendar.DAY_OF_WEEK) != holiday1 + 1 && calendar.get(GregorianCalendar.DAY_OF_WEEK) != holiday2 + 1) { // 如果是周一到周五 给出的节假日列表中 包含这天 返回FALSE return !holiDayList .contains(myFormatter.format(calendar.getTime())); } else { // 如果是周六到周日 给出的工作日列表中 包含这天 返回TRUE return workDayList.contains(myFormatter.format(calendar.getTime())); } } /** * 根据每天的工作的开始结束时间 计算工作时间 单位 秒 */ public static long dayTime(String ams, String ame, String pms, String pme, String stime, String etime, String check) throws Exception { // 两个时间的格式都是HHmm SimpleDateFormat myFormatter = new SimpleDateFormat("HHmm"); Date dateAmS = myFormatter.parse(ams); Date dateAmE = myFormatter.parse(ame); Date datePmS = myFormatter.parse(pms); Date datePmE = myFormatter.parse(pme); long spaceAM = (dateAmE.getTime() - dateAmS.getTime()) / 1000; long spacePM = (datePmE.getTime() - datePmS.getTime()) / 1000; // 两个时间段都在同一天 if (check.equals("oneDay")) { Date dateStime = myFormatter.parse(stime); Date dateEtime = myFormatter.parse(etime); Date startTime = dateStime; Date endTime = dateEtime; // 确定开始时间 if ((dateAmS.getTime() - dateStime.getTime()) >= 0) { startTime = dateAmS; } else if (dateAmS.getTime() < dateStime.getTime() && dateStime.getTime() <= dateAmE.getTime()) { startTime = dateStime; } else if (dateAmE.getTime() < dateStime.getTime() && dateStime.getTime() <= datePmS.getTime()) { startTime = datePmS; } else if (datePmS.getTime() < dateStime.getTime() && dateStime.getTime() < datePmE.getTime()) { startTime = dateStime; } else if (datePmE.getTime() <= dateStime.getTime()) { startTime = datePmE; } // 确定结束时间 if ((dateAmS.getTime() - dateEtime.getTime()) >= 0) { endTime = dateAmS; } else if (dateAmS.getTime() < dateEtime.getTime() && dateEtime.getTime() <= dateAmE.getTime()) { endTime = dateEtime; } else if (dateAmE.getTime() < dateEtime.getTime() && dateEtime.getTime() <= datePmS.getTime()) { endTime = datePmS; } else if (datePmS.getTime() < dateEtime.getTime() && dateEtime.getTime() < datePmE.getTime()) { endTime = dateEtime; } else if (datePmE.getTime() <= dateEtime.getTime()) { endTime = datePmE; } if (dateAmE.getTime() >= startTime.getTime() && endTime.getTime() >= datePmS.getTime()) { return (endTime.getTime() - startTime.getTime() - (datePmS .getTime() - dateAmE.getTime())) / 1000; } else { return (endTime.getTime() - startTime.getTime()) / 1000; } // 两个时间段不在同一天 // 计算当前接收的工作时间是开始天的小时 } else if (check.equals("start")) { Date dateStime = myFormatter.parse(stime); // 接收时间在工作时间之后 则不记入工作时间 long t1 = (datePmE.getTime() - dateStime.getTime()) / 1000; if (t1 < 0) { return 0; } // 接收时间在工作时间之前 则工作时间就是每天的工作时间 t1 = (dateAmS.getTime() - dateStime.getTime()) / 1000; if (t1 > 0) { return spaceAM + spacePM; } // 接收时间在上午工作时间结束之前 t1 = (dateAmE.getTime() - dateStime.getTime()) / 1000; if (t1 > 0) { return t1 + spacePM; } // 接收时间在下午工作时间结束之前 t1 = (datePmE.getTime() - dateStime.getTime()) / 1000; if (t1 > 0) { long tmpT = (datePmS.getTime() - dateStime.getTime()) / 1000; if (tmpT < 0) { tmpT = 0; } return t1 - tmpT; } return 0; // 计算当前的工作时间是结束天的小时 } else if (check.equals("end")) { Date dateEtime = myFormatter.parse(etime); // 办理时间在工作时间之后 则为每天工作时间 long t1 = (datePmE.getTime() - dateEtime.getTime()) / 1000; if (t1 < 0) { return spaceAM + spacePM; } // 办理时间在工作时间之前 则返回0 t1 = (dateAmS.getTime() - dateEtime.getTime()) / 1000; if (t1 > 0) { return 0; } // 办理时间在上午工作时间结束之前 t1 = (dateAmE.getTime() - dateEtime.getTime()) / 1000; if (t1 > 0) { long tmpT = (dateEtime.getTime() - dateAmS.getTime()) / 1000; return tmpT; } // 办理时间在下午工作时间结束之前 t1 = (datePmE.getTime() - dateEtime.getTime()) / 1000; if (t1 > 0) { long tmpT = (dateEtime.getTime() - datePmS.getTime()) / 1000; if (tmpT < 0) { return spaceAM; } else { return tmpT + spaceAM; } } return 0; } else { return 0; } } } |