1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.kfs.sys.util;
20
21 import java.sql.Timestamp;
22 import java.util.Calendar;
23 import java.util.Date;
24 import java.util.GregorianCalendar;
25
26 import org.kuali.kfs.sys.KFSConstants;
27 import org.kuali.rice.krad.util.ObjectUtils;
28
29
30
31
32
33
34 public class KfsDateUtils {
35
36
37
38
39
40 public static boolean isSameDay(Date date1, Date date2) {
41 boolean same = false;
42
43 if ((date1 == null) && (date2 == null)) {
44 same = true;
45 }
46 else if ((date1 != null) && (date2 != null)) {
47 return org.apache.commons.lang.time.DateUtils.isSameDay(date1, date2);
48 }
49 else {
50 same = false;
51 }
52
53 return same;
54 }
55
56
57
58
59
60
61 public static boolean isSameDay(Calendar cal1, Calendar cal2) {
62 boolean same = false;
63
64 if ((cal1 == null) && (cal2 == null)) {
65 same = true;
66 }
67 else if ((cal1 != null) && (cal2 != null)) {
68 return org.apache.commons.lang.time.DateUtils.isSameDay(cal1, cal2);
69 }
70 else {
71 same = false;
72 }
73
74 return same;
75 }
76
77
78
79
80
81
82
83 public static java.sql.Date convertToSqlDate(java.util.Date date) {
84 return new java.sql.Date(date.getTime());
85 }
86
87
88
89
90
91
92
93
94 public static java.sql.Date clearTimeFields(java.sql.Date date) {
95 Calendar timelessCal = new GregorianCalendar();
96 timelessCal.setTime(date);
97 timelessCal.set(Calendar.HOUR_OF_DAY, 0);
98 timelessCal.set(Calendar.MINUTE, 0);
99 timelessCal.set(Calendar.SECOND, 0);
100 timelessCal.set(Calendar.MILLISECOND, 0);
101
102 return new java.sql.Date(timelessCal.getTimeInMillis());
103 }
104
105
106
107
108
109
110
111
112 public static java.util.Date clearTimeFields(java.util.Date date) {
113 Calendar timelessCal = new GregorianCalendar();
114 timelessCal.setTime(date);
115 timelessCal.set(Calendar.HOUR_OF_DAY, 0);
116 timelessCal.set(Calendar.MINUTE, 0);
117 timelessCal.set(Calendar.SECOND, 0);
118 timelessCal.set(Calendar.MILLISECOND, 0);
119
120 return new java.util.Date(timelessCal.getTimeInMillis());
121 }
122
123
124
125
126
127
128 public static double getDifferenceInDays(Timestamp startDateTime, Timestamp endDateTime) {
129 int difference = 0;
130
131 Calendar startCalendar = Calendar.getInstance();
132 startCalendar.setTime(startDateTime);
133
134 Calendar endCalendar = Calendar.getInstance();
135 endCalendar.setTime(endDateTime);
136
137
138 Calendar startCompare = Calendar.getInstance();
139 startCompare.setTime(startDateTime);
140 startCompare.set(Calendar.HOUR_OF_DAY, 0);
141 startCompare.set(Calendar.MINUTE, 0);
142 startCompare.set(Calendar.SECOND, 0);
143 startCompare.set(Calendar.MILLISECOND, 0);
144
145 Calendar endCompare = Calendar.getInstance();
146 endCompare.setTime(endDateTime);
147 endCompare.set(Calendar.HOUR_OF_DAY, 0);
148 endCompare.set(Calendar.MINUTE, 0);
149 endCompare.set(Calendar.SECOND, 0);
150 endCompare.set(Calendar.MILLISECOND, 0);
151
152 return (endCompare.getTimeInMillis() - startCompare.getTimeInMillis()) / ((double)KFSConstants.MILLSECONDS_PER_DAY);
153 }
154
155
156
157
158
159
160 public static double getDifferenceInHours(Timestamp startDateTime, Timestamp endDateTime) {
161 int difference = 0;
162
163 Calendar startCalendar = Calendar.getInstance();
164 startCalendar.setTime(startDateTime);
165
166 Calendar endCalendar = Calendar.getInstance();
167 endCalendar.setTime(endDateTime);
168
169
170 Calendar startCompare = Calendar.getInstance();
171 startCompare.setTime(startDateTime);
172 startCompare.set(Calendar.HOUR_OF_DAY, 0);
173 startCompare.set(Calendar.MINUTE, 0);
174
175 Calendar endCompare = Calendar.getInstance();
176 endCompare.setTime(endDateTime);
177 endCompare.set(Calendar.HOUR_OF_DAY, 0);
178 endCompare.set(Calendar.MINUTE, 0);
179
180 return (endCalendar.getTimeInMillis() - startCalendar.getTimeInMillis()) / (60.0000 * 60.0000 * 1000.0000);
181 }
182
183
184
185
186
187
188
189
190
191
192
193
194
195 public static java.sql.Date newDate(Integer year, Integer month, Integer day) {
196
197
198 if (year == null) {
199 throw new IllegalArgumentException("Argument 'year' passed in was null.");
200 }
201 if (month == null) {
202 throw new IllegalArgumentException("Argument 'month' passed in was null.");
203 }
204 if (day == null) {
205 throw new IllegalArgumentException("Argument 'day' passed in was null.");
206 }
207
208 Calendar calendar = Calendar.getInstance();
209 calendar.set(Calendar.YEAR, year);
210 calendar.set(Calendar.MONTH, month);
211 calendar.set(Calendar.DAY_OF_MONTH, day);
212 calendar.clear(Calendar.HOUR_OF_DAY);
213 calendar.clear(Calendar.MINUTE);
214 calendar.clear(Calendar.SECOND);
215 calendar.clear(Calendar.MILLISECOND);
216
217 return new java.sql.Date(calendar.getTimeInMillis());
218 }
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234 public static java.sql.Date newDate(Integer year, Integer month, Integer day, Integer hour, Integer minute, Integer second) {
235
236
237 if (year == null) {
238 throw new IllegalArgumentException("Argument 'year' passed in was null.");
239 }
240 if (month == null) {
241 throw new IllegalArgumentException("Argument 'month' passed in was null.");
242 }
243 if (day == null) {
244 throw new IllegalArgumentException("Argument 'day' passed in was null.");
245 }
246 if (hour == null) {
247 throw new IllegalArgumentException("Argument 'hour' passed in was null.");
248 }
249 if (minute == null) {
250 throw new IllegalArgumentException("Argument 'minute' passed in was null.");
251 }
252 if (second == null) {
253 throw new IllegalArgumentException("Argument 'second' passed in was null.");
254 }
255
256 Calendar calendar = Calendar.getInstance();
257 calendar.set(Calendar.YEAR, year);
258 calendar.set(Calendar.MONTH, month);
259 calendar.set(Calendar.DAY_OF_MONTH, day);
260 calendar.set(Calendar.HOUR_OF_DAY, hour);
261 calendar.set(Calendar.MINUTE, minute);
262 calendar.set(Calendar.SECOND, second);
263 calendar.clear(Calendar.MILLISECOND);
264
265 return new java.sql.Date(calendar.getTimeInMillis());
266 }
267
268
269
270
271
272
273
274 public static boolean isSameDayOrEarlier(Date d1, Date d2) {
275 if (ObjectUtils.isNull(d1) || ObjectUtils.isNull(d2)) {
276 return false;
277 }
278 if (isSameDay(d1, d2)) {
279 return true;
280 }
281 return d1.compareTo(d2) < 0;
282 }
283
284
285
286
287
288
289
290 public static boolean isSameDayOrLater(Date d1, Date d2) {
291 if (ObjectUtils.isNull(d1) || ObjectUtils.isNull(d2)) {
292 return false;
293 }
294 if (isSameDay(d1, d2)) {
295 return true;
296 }
297 return d1.compareTo(d2) > 0;
298 }
299 }