Some print.
Some print.

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

by 19. on 2009-07-06

工作日和每天工作时间的统计维护(顺带提供一个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;
		}
 
	}
 
}
{ Tags: , , }

(查看之前文章)    »    |    (查看之后文章)    »    |


这篇文章发布于 2009年07月6日,星期一,6:31 下午,归类于 Diary。 您可以跟踪这篇文章的评论通过 RSS 2.0 feed。 您可以留下评论,或者从您的站点trackback



文章回复(Leave a reply):

注意: 评论者允许直接点击留言人下方的“回复并邮件”按钮将自己回复的评论邮件通知另外评论者。点击“回复”按钮则只回复不发邮件。