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