1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.nuiton.util;
24
25 import java.text.DateFormat;
26 import java.text.DateFormatSymbols;
27 import java.text.ParseException;
28 import java.text.SimpleDateFormat;
29 import java.time.LocalDate;
30 import java.time.Period;
31 import java.time.ZoneId;
32 import java.util.Calendar;
33 import java.util.Date;
34 import java.util.Locale;
35
36
37
38
39
40
41
42
43
44 public class DateUtil {
45
46 public static final String DEFAULT_PATTERN = "dd/MM/yyyy";
47
48 public static final String MONTH_PATTERN = "MM/yyyy";
49
50
51
52
53
54
55
56
57
58
59 public static String formatDate(Date date, String pattern) {
60 SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
61 return simpleDateFormat.format(date);
62 }
63
64 public static String formatDate(Date date, String pattern, Locale locale) {
65 SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, locale);
66 return simpleDateFormat.format(date);
67 }
68
69
70
71
72
73
74
75
76
77
78
79 public static Date parseDate(String date, String pattern) throws ParseException {
80 SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
81 Date result = simpleDateFormat.parse(date);
82 return result;
83 }
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 public static Date createDate(int s, int m, int h, int dd, int mm, int yy) {
99 Calendar calendar = Calendar.getInstance();
100 calendar.setTimeInMillis(0L);
101 calendar.set(Calendar.YEAR, yy);
102 calendar.set(Calendar.MONTH, mm - 1);
103 calendar.set(Calendar.DAY_OF_MONTH, dd);
104 calendar.set(Calendar.HOUR_OF_DAY, h);
105 calendar.set(Calendar.MINUTE, m);
106 calendar.set(Calendar.SECOND, s);
107 return calendar.getTime();
108 }
109
110
111
112
113
114
115
116
117
118
119
120 public static Date createDate(int dd, int mm, int yy) {
121 Calendar calendar = Calendar.getInstance();
122 calendar.set(Calendar.YEAR, yy);
123 calendar.set(Calendar.MONTH, mm - 1);
124 calendar.set(Calendar.DAY_OF_MONTH, dd);
125 return setMinTimeOfDay(calendar.getTime());
126 }
127
128
129
130
131
132
133
134
135
136
137 public static Date createDateAfterToday(int ddStep, int mmStep, int yyStep) {
138 Calendar calendar = getDefaultCalendar(new Date());
139 calendar.add(Calendar.DAY_OF_MONTH, ddStep);
140 calendar.add(Calendar.MONTH, mmStep);
141 calendar.add(Calendar.YEAR, yyStep);
142 return calendar.getTime();
143 }
144
145
146
147
148
149
150
151
152 public static Date setLastDayOfMonth(Date date) {
153 Calendar calendar = getDefaultCalendar(date);
154 int maximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
155 calendar.set(Calendar.DAY_OF_MONTH, maximum);
156 Date lastDay = calendar.getTime();
157 return lastDay;
158 }
159
160
161
162
163
164
165
166 public static Date setFirstDayOfMonth(Date date) {
167 Calendar calendar = getDefaultCalendar(date);
168 calendar.set(Calendar.DAY_OF_MONTH, 1);
169 Date firstDay = calendar.getTime();
170 return firstDay;
171 }
172
173
174
175
176
177
178
179 public static Date setLastDayOfYear(Date date) {
180 Calendar calendar = getDefaultCalendar(date);
181 int maximum = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
182 calendar.set(Calendar.DAY_OF_YEAR, maximum);
183 Date lastDay = calendar.getTime();
184 return lastDay;
185 }
186
187
188
189
190
191
192
193 public static Date setFirstDayOfYear(Date date) {
194 Calendar calendar = getDefaultCalendar(date);
195 calendar.set(Calendar.DAY_OF_YEAR, 1);
196 Date firstDay = calendar.getTime();
197 return firstDay;
198 }
199
200
201
202
203
204
205
206 public static Date setMinTimeOfDay(Date date) {
207 Calendar calendar = getDefaultCalendar(date);
208 calendar.set(Calendar.AM_PM, Calendar.AM);
209 calendar.set(Calendar.HOUR, 0);
210 calendar.set(Calendar.MINUTE, 0);
211 calendar.set(Calendar.SECOND, 0);
212 calendar.set(Calendar.MILLISECOND, 0);
213 return calendar.getTime();
214 }
215
216
217
218
219
220
221
222 public static Date setMaxTimeOfDay(Date date) {
223 Calendar calendar = getDefaultCalendar(date);
224 calendar.set(Calendar.AM_PM, Calendar.PM);
225 calendar.set(Calendar.HOUR, 11);
226 calendar.set(Calendar.MINUTE, 59);
227 calendar.set(Calendar.SECOND, 59);
228 calendar.set(Calendar.MILLISECOND, 999);
229 return calendar.getTime();
230 }
231
232
233
234
235
236
237
238
239
240
241
242 public static boolean between(Date myDate, Date beforeDate, Date afterDate) {
243 if (myDate == null) {
244 return false;
245 }
246 boolean result = true;
247 result &= myDate.after(beforeDate) || myDate.compareTo(beforeDate) == 0;
248 result &= afterDate == null || myDate.before(afterDate) ||
249 myDate.compareTo(afterDate) == 0;
250 return result;
251 }
252
253
254
255
256
257
258
259
260
261
262 public static boolean currentPeriod(Date beforeDate, Date afterDate) {
263 return between(new Date(), beforeDate, afterDate);
264 }
265
266
267
268
269
270
271
272 public static int getMonth(Date date) {
273 Calendar calendar = getDefaultCalendar(date);
274 return calendar.get(Calendar.MONTH);
275 }
276
277
278
279
280
281
282
283
284
285 public static int getDifferenceInSeconds(Date beginDate, Date endDate) {
286 long begin = beginDate.getTime();
287 long end = endDate.getTime();
288 return (int) Math.ceil((end - begin) / 1000);
289 }
290
291
292
293
294
295
296
297
298
299 public static int getDifferenceInMinutes(Date beginDate, Date endDate) {
300 long begin = beginDate.getTime();
301 long end = endDate.getTime();
302
303 return (int) Math.ceil((end - begin) / 60000);
304 }
305
306
307
308
309
310
311
312
313
314 public static int getDifferenceInHours(Date beginDate, Date endDate) {
315 long begin = beginDate.getTime();
316 long end = endDate.getTime();
317
318 return (int) Math.ceil((end - begin) / 3600000);
319 }
320
321
322
323
324
325
326
327
328
329
330 public static int getDifferenceInDays(Date beginDate, Date endDate) {
331
332 LocalDate beginLocalDate = beginDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
333 LocalDate endLocalDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
334
335 Period period = Period.between(beginLocalDate, endLocalDate);
336 int diff = period.getDays();
337
338 return diff;
339 }
340
341
342
343
344
345
346
347
348
349
350
351 public static int getDifferenceInMonths(Date beginDate, Date endDate) {
352 int count = 0;
353 Calendar fromCalendar = getDefaultCalendar(beginDate);
354 Calendar thruCalendar = getDefaultCalendar(endDate);
355
356 while (fromCalendar.before(thruCalendar)) {
357 fromCalendar.add(Calendar.MONTH, 1);
358 count++;
359 }
360 return count;
361 }
362
363
364
365
366
367
368
369
370
371 public static int getAge(Date birthDate) {
372 int count = 0;
373 Calendar fromCalendar = getDefaultCalendar(birthDate);
374 Calendar thruCalendar = getDefaultCalendar(new Date());
375
376 fromCalendar.add(Calendar.YEAR, 1);
377 while (fromCalendar.before(thruCalendar)) {
378 count++;
379 fromCalendar.add(Calendar.YEAR, 1);
380 }
381 return count;
382 }
383
384
385
386
387
388
389
390
391 public static String getMonthLibelle(int monthNumber, Locale locale) {
392 return new DateFormatSymbols(locale).getMonths()[monthNumber - 1];
393 }
394
395
396
397
398
399
400
401 public static String getMonthLibelle(int monthNumber) {
402 return getMonthLibelle(monthNumber, Locale.getDefault());
403 }
404
405
406
407
408
409
410
411 public static Date getYesterday(Date date) {
412 Calendar cal = getDefaultCalendar(date);
413 if (cal.get(Calendar.MONTH) == Calendar.JANUARY && cal.get(Calendar.DAY_OF_MONTH) == 1) {
414 cal.roll(Calendar.YEAR, false);
415 }
416 if (cal.get(Calendar.DAY_OF_MONTH) == 1) {
417 cal.roll(Calendar.MONTH, false);
418 }
419 cal.roll(Calendar.DAY_OF_MONTH, false);
420 return cal.getTime();
421 }
422
423
424
425
426
427
428
429
430 public static Calendar getDefaultCalendar(Date date) {
431 Calendar calendar = Calendar.getInstance();
432 calendar.setTime(date);
433 return calendar;
434 }
435
436
437
438
439
440
441
442
443
444
445
446
447 public static Date truncateToDayOfWeek(Date date) {
448 Calendar calendar = Calendar.getInstance();
449 calendar.setTime(date);
450 calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
451 calendar.set(Calendar.HOUR_OF_DAY, 0);
452 calendar.set(Calendar.MINUTE, 0);
453 calendar.set(Calendar.SECOND, 0);
454 calendar.set(Calendar.MILLISECOND, 0);
455 return calendar.getTime();
456 }
457
458
459
460
461
462
463
464
465 public static Date getDay(Date date) {
466 Calendar calendar = Calendar.getInstance();
467 calendar.setTime(date);
468 calendar.set(Calendar.MILLISECOND, 0);
469 calendar.set(Calendar.SECOND, 0);
470 calendar.set(Calendar.MINUTE, 0);
471 calendar.set(Calendar.HOUR_OF_DAY, 0);
472 date = calendar.getTime();
473 return date;
474 }
475
476
477
478
479
480
481
482 public static Date getEndOfDay(Date date) {
483 Calendar calendar = Calendar.getInstance();
484 calendar.setTime(date);
485 calendar.set(Calendar.MILLISECOND, 999);
486 calendar.set(Calendar.SECOND, 59);
487 calendar.set(Calendar.MINUTE, 59);
488 calendar.set(Calendar.HOUR_OF_DAY, 23);
489 date = calendar.getTime();
490 return date;
491 }
492
493
494
495
496
497
498
499
500
501
502
503 public static Date getDateAndTime(Date day, Date time, boolean useSecond, boolean useMiliSecond) {
504
505 Calendar calendar = Calendar.getInstance();
506
507
508 calendar.setTime(time);
509 int h = calendar.get(Calendar.HOUR_OF_DAY);
510 int m = calendar.get(Calendar.MINUTE);
511 int s = useSecond ? calendar.get(Calendar.SECOND) : 0;
512 int ms = useMiliSecond ? calendar.get(Calendar.MILLISECOND) : 0;
513
514 calendar.setTime(day);
515
516
517 calendar.set(Calendar.HOUR_OF_DAY, h);
518 calendar.set(Calendar.MINUTE, m);
519 calendar.set(Calendar.SECOND, s);
520 calendar.set(Calendar.MILLISECOND, ms);
521
522 return calendar.getTime();
523
524 }
525
526
527
528
529
530
531
532
533
534
535 public static Date getTime(Date dayTime, boolean useSecond, boolean useMiliSecond) {
536 Calendar calendar = Calendar.getInstance();
537
538
539 calendar.setTime(dayTime);
540 int h = calendar.get(Calendar.HOUR_OF_DAY);
541 int m = calendar.get(Calendar.MINUTE);
542 int s = calendar.get(Calendar.SECOND);
543 int ms = calendar.get(Calendar.MILLISECOND);
544
545
546
547 calendar.setTimeInMillis(0);
548
549
550 calendar.set(Calendar.HOUR_OF_DAY, h);
551 calendar.set(Calendar.MINUTE, m);
552 if (useSecond) {
553 calendar.set(Calendar.SECOND, s);
554 }
555 if (useMiliSecond) {
556 calendar.set(Calendar.MILLISECOND, ms);
557 }
558
559 return calendar.getTime();
560 }
561 }