Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
795 blopes 1
package br.com.kronus.core;
2
 
3
import java.text.ParseException;
4
import java.text.SimpleDateFormat;
5
import java.util.Calendar;
6
import java.util.Date;
7
import java.util.GregorianCalendar;
8
import java.util.TimeZone;
9
import java.util.concurrent.TimeUnit;
10
 
11
public class DataUtils {
12
 
13
        private static Date dataAtual;
14
 
15
        public static Date getDataAtual() {
16
                return VerificadorUtil.estaNulo(dataAtual) ? Calendar.getInstance(TimeZone.getTimeZone("GMT-03:00")).getTime() : dataAtual;
17
        }
18
 
19
        public static void setDataAtual(Date data) {
20
                dataAtual = data;
21
        }
22
 
23
        public static boolean dataAtualEstaEntrePeriodos(Date dataInicial, Date dataFinal) {
24
                return getDataAtual().after(dataInicial) && getDataAtual().before(dataFinal);
25
        }
26
 
27
        public static boolean dataEstaEntrePeriodos(Date dataVerificada, Date dataInicial, Date dataFinal) {
28
                return dataVerificada.after(dataInicial) && dataVerificada.before(dataFinal);
29
        }
30
 
31
        public static boolean dataEstaIgualOuEntrePeriodos(Date dataVerificada, Date dataInicial, Date dataFinal) {
32
                return (dataVerificada.after(dataInicial) && dataVerificada.before(dataFinal)) || dataVerificada.equals(dataInicial) || dataVerificada.equals(dataFinal);
33
        }
34
 
35
        public static boolean datasIguais(Date datePrimeira, Date dataSegunda) {
36
                String primeiraData = converterDataParaString(datePrimeira);
37
                String segundaData = converterDataParaString(dataSegunda);
38
                return primeiraData.equals(segundaData);
39
        }
40
 
41
        public static Date getPrimeiroDiaDoAnoAtual() {
42
                return getPrimeiroDiaDoMes(1, Calendar.getInstance().get(Calendar.YEAR));
43
        }
44
 
45
        public static Date getUltimoDiaDoAnoAtual() {
46
                return getUltimoDiaDoMes(12, Calendar.getInstance().get(Calendar.YEAR));
47
        }
48
 
49
        public static Date getPrimeiroDiaDoMesAtual() {
50
                return getPrimeiroDiaDoMes(Calendar.getInstance().get(Calendar.MONTH)+1, Calendar.getInstance().get(Calendar.YEAR));
51
        }
52
 
53
        public static Date getUltimoDiaDoMesAtual() {
54
                return getUltimoDiaDoMes(Calendar.getInstance().get(Calendar.MONTH)+1, Calendar.getInstance().get(Calendar.YEAR));
55
        }
56
 
57
        public static Date getUltimoDiaDoMes(Date mes) {
58
                Calendar calendar = new GregorianCalendar();
59
                calendar.setTime(mes);
60
                return DataUtils.obterData(calendar.getActualMaximum(Calendar.DAY_OF_MONTH), calendar.get(Calendar.MONTH), calendar.get(Calendar.YEAR));
61
        }
62
 
63
        public static Date getPrimeiroDiaDoMes(Integer mes, Integer ano) {
64
                Calendar calendario = getCalendar();
65
                calendario.set(Calendar.MONTH, mes-1);
66
                calendario.set(Calendar.YEAR, ano);
67
                calendario.set(Calendar.DAY_OF_MONTH, 1);
68
                calendario.set(Calendar.HOUR_OF_DAY, 0);
69
                calendario.set(Calendar.MINUTE, 0);
70
                calendario.set(Calendar.SECOND, 0);
71
                return calendario.getTime();
72
        }
73
 
74
        public static Date getUltimoDiaDoMes(Integer mes, Integer ano) {
75
                Calendar calendario = getCalendar();
76
                calendario.set(Calendar.MONTH, mes-1);
77
                calendario.set(Calendar.YEAR, ano);
78
                calendario.set(Calendar.DAY_OF_MONTH, calendario.getActualMaximum(Calendar.DAY_OF_MONTH));
79
                calendario.set(Calendar.HOUR_OF_DAY, 23);
80
                calendario.set(Calendar.MINUTE, 59);
81
                calendario.set(Calendar.SECOND, 59);
82
                return calendario.getTime();
83
        }
84
 
85
        public static Date getPrimeiroDiaDoAno(Integer ano) {
86
                Calendar calendario = getCalendar();
87
                calendario.set(Calendar.MONTH, 0);
88
                calendario.set(Calendar.YEAR, ano);
89
                calendario.set(Calendar.DAY_OF_MONTH, 1);
90
                calendario.set(Calendar.HOUR_OF_DAY, 0);
91
                calendario.set(Calendar.MINUTE, 0);
92
                calendario.set(Calendar.SECOND, 0);
93
                return calendario.getTime();
94
        }
95
 
96
        public static Date getUltimoDiaDoAno(Integer ano) {
97
                Calendar calendario = getCalendar();
98
                calendario.set(Calendar.MONTH, 11);
99
                calendario.set(Calendar.YEAR, ano);
100
                calendario.set(Calendar.DAY_OF_MONTH, calendario.getActualMaximum(Calendar.DAY_OF_MONTH));
101
                calendario.set(Calendar.HOUR_OF_DAY, 23);
102
                calendario.set(Calendar.MINUTE, 59);
103
                calendario.set(Calendar.SECOND, 59);
104
                return calendario.getTime();
105
        }
106
 
107
        public static Date getPrimeiroDiaDoMesAnterior() {
108
                Calendar calendarMesAnterior = obterCalendario(acrescentarMeses(getDataAtual(), -1));
109
                return DataUtils.obterData(1, calendarMesAnterior.get(Calendar.MONTH), calendarMesAnterior.get(Calendar.YEAR));
110
        }
111
 
112
        public static Date getUltimoDiaDoMesAnterior() {
113
                Calendar calendarMesAnterior = obterCalendario(acrescentarMeses(getDataAtual(), -1));
114
                return DataUtils.obterData(calendarMesAnterior.getActualMaximum(Calendar.DAY_OF_MONTH), calendarMesAnterior.get(Calendar.MONTH), calendarMesAnterior.get(Calendar.YEAR));
115
        }
116
 
117
        public static int getQuantidadeDeSemanasNoAno(int ano) {
118
                Calendar calendar = getCalendar();
119
                calendar.set(ano, Calendar.DECEMBER, 31);
120
                int total = calendar.get(Calendar.WEEK_OF_YEAR);
121
                if (total == 1) {
122
                        calendar.set(ano, Calendar.DECEMBER, 24);
123
                        total = calendar.get(Calendar.WEEK_OF_YEAR);
124
                }
125
                return total;
126
        }
127
 
128
        private static Calendar getCalendar() {
129
                GregorianCalendar calendario = new GregorianCalendar();  
130
                calendario.setFirstDayOfWeek(Calendar.SUNDAY);
131
                calendario.setMinimalDaysInFirstWeek(4);
132
                return calendario;
133
        }
134
 
135
        public static Calendar obterCalendario(int ano, int numeroSemana, int diaDaSemana) {
136
                Calendar calendario = getCalendar();
137
                calendario.set(Calendar.YEAR, ano);
138
                calendario.set(Calendar.WEEK_OF_YEAR, numeroSemana);
139
                calendario.set(Calendar.DAY_OF_WEEK, diaDaSemana);
140
                return calendario;
141
        }
142
 
143
        public static Date obterData(int dia, int mes, int ano) {
144
                Calendar calendario = getCalendar();
145
                calendario.set(Calendar.DAY_OF_MONTH, dia);
146
                calendario.set(Calendar.MONTH, mes);
147
                calendario.set(Calendar.YEAR, ano);
148
                return calendario.getTime();
149
        }
150
 
151
        public static Calendar obterCalendario(Date data) {
152
                if (VerificadorUtil.estaNulo(data)) {
153
                        return null;
154
                }
155
                Calendar calendario = getCalendar();
156
                calendario.setTime(data);
157
                return calendario;
158
        }
159
 
160
        public static Date converterStringParaDataNoFormato(String dataString, String formato) {
161
                try {
162
                        if (VerificadorUtil.naoEstaNuloOuVazio(dataString)) {
163
                                return new SimpleDateFormat(formato).parse(dataString);
164
                        }
165
                        return null;
166
                } catch (ParseException e) {
167
                        throw new IllegalArgumentException("Não foi possível converter a data informada.");
168
                }
169
        }
170
 
171
        public static Date converterStringParaData(String dataString) {
172
                try {
173
                        if (VerificadorUtil.naoEstaNuloOuVazio(dataString)) {
174
                                return new SimpleDateFormat("dd/MM/yyyy").parse(dataString);
175
                        }
176
                        return null;
177
                } catch (ParseException e) {
178
                        throw new IllegalArgumentException("Não foi possível converter a data informada.");
179
                }
180
        }
181
 
182
        public static Date converterStringParaDataComHorario(String dataString) {
183
                try {
184
                        if (VerificadorUtil.naoEstaNulo(dataString)) {
185
                                return new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(dataString);
186
                        }
187
                        return null;
188
                } catch (ParseException e) {
189
                        throw new IllegalArgumentException("Não foi possível converter a data informada.");
190
                }
191
        }
192
 
193
        public static String converterDataParaString(Date data) {
194
                if (VerificadorUtil.naoEstaNulo(data)) {
195
                        return new SimpleDateFormat("dd/MM/yyyy").format(data);
196
                }
197
                return null;
198
        }
199
 
200
        public static String converterDataParaStringNoFormato(Date data, String formato) {
201
                if (VerificadorUtil.naoEstaNulo(data)) {
202
                        return new SimpleDateFormat(formato).format(data);
203
                }
204
                return null;
205
        }
206
 
207
        public static String converterDataComHorarioParaString(Date data) {
208
                if (VerificadorUtil.naoEstaNulo(data)) {
209
                        return new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(data);
210
                }
211
                return null;
212
        }
213
 
214
        public static Date getDataComHorarioMinimo(Date data) {
215
                Calendar calendario = Calendar.getInstance();
216
                calendario.setTime(data);
217
                calendario.set(Calendar.HOUR_OF_DAY, 0);
218
                calendario.set(Calendar.MINUTE, 0);
219
                calendario.set(Calendar.SECOND, 0);
220
                calendario.set(Calendar.MILLISECOND, 0);
221
                return calendario.getTime();
222
        }
223
 
224
        public static Date getDataComHorarioMaximo(Date data) {
225
                Calendar calendario = Calendar.getInstance();
226
                calendario.setTime(data);
227
                calendario.set(Calendar.HOUR_OF_DAY, 23);
228
                calendario.set(Calendar.MINUTE, 59);
229
                calendario.set(Calendar.SECOND, 59);
230
                calendario.set(Calendar.MILLISECOND, 999);
231
                return calendario.getTime();
232
        }
233
 
234
        public static Date zerarMillisecond(Date data) {
235
                Calendar calendario = Calendar.getInstance();
236
                calendario.setTime(data);
237
                calendario.set(Calendar.MILLISECOND, 0);
238
                return calendario.getTime();
239
        }
240
 
241
        public static Date acrescentarUmMinuto(Date data) {
242
                Calendar calendario = Calendar.getInstance();
243
                calendario.setTime(data);
244
                calendario.add(Calendar.MINUTE, 1);
245
                return calendario.getTime();
246
        }
247
 
248
        public static Date acrescentarDiasResultadoDiaUtil(Date data, Integer quantidadeDias) {
249
                Date diaUtil = acrescentarDias(data, quantidadeDias);
250
                diaUtil = proximoDiaUtil(diaUtil);
251
                return diaUtil;
252
        }
253
 
254
        public static Date subtrairDias(Date data, Integer quantidadeDias) {
255
                Calendar calendario = Calendar.getInstance();
256
                calendario.setTime(data);
257
                calendario.add(Calendar.DATE, (quantidadeDias * -1));
258
                return calendario.getTime();
259
        }
260
 
261
        public static Date acrescentarDias(Date data, Integer quantidadeDias) {
262
                Calendar calendario = Calendar.getInstance();
263
                calendario.setTime(data);
264
                calendario.add(Calendar.DATE, quantidadeDias);
265
                return calendario.getTime();
266
        }
267
 
268
        public static Integer getDia(Date data) {
269
                Calendar calendario = Calendar.getInstance();
270
                calendario.setTime(data);
271
                return calendario.get(Calendar.DAY_OF_MONTH);
272
        }
273
 
274
        public static Integer getMes(Date data) {
275
                Calendar calendario = Calendar.getInstance();
276
                calendario.setTime(data);
277
                return calendario.get(Calendar.MONTH);
278
        }
279
 
280
        public static Integer getAno(Date data) {
281
                Calendar calendario = Calendar.getInstance();
282
                calendario.setTime(data);
283
                return calendario.get(Calendar.YEAR);
284
        }
285
 
286
        public static Date acrescentarMeses(Date data, Integer quantidadeMeses) {
287
                Calendar calendario = Calendar.getInstance();
288
                calendario.setTime(data);
289
                calendario.add(Calendar.MONTH, quantidadeMeses);
290
                return calendario.getTime();
291
        }
292
 
293
        public static Date acrescentarAnos(Date data, Integer quantidadeAnos) {
294
                Calendar calendario = Calendar.getInstance();
295
                calendario.setTime(data);
296
                calendario.add(Calendar.YEAR, quantidadeAnos);
297
                return calendario.getTime();
298
        }
299
 
300
        public static Date proximoDiaUtil(Date data) {
301
                Calendar cal = Calendar.getInstance();  
302
                cal.setTime(data);  
303
                int day = cal.get(Calendar.DAY_OF_WEEK);  
304
                switch (day) {  
305
                    case Calendar.SATURDAY:  
306
                        cal.add(Calendar.DAY_OF_WEEK, 2);    
307
                        break;  
308
                    case Calendar.SUNDAY:  
309
                        cal.add(Calendar.DAY_OF_WEEK, 1);  
310
                        break;  
311
                    default:  
312
                        break;  
313
                }  
314
                return cal.getTime();
315
        }
316
 
317
        public static Integer calcularDiferenceEmDiasEntreDuasDatas(Date dataFinal, Date dataInicial) {
318
                try {
319
                        Calendar calendarDataInicial = new GregorianCalendar();
320
                        calendarDataInicial.setTime(dataInicial);
321
                        Calendar calendarDataFinal = new GregorianCalendar();
322
                        calendarDataFinal.setTime(dataFinal);
323
 
324
                        Long diferencaEntreAsDatasEmMilisegundos = calendarDataFinal.getTimeInMillis() - calendarDataInicial.getTimeInMillis();
325
                    Integer milisegundosDeUmDia = 1000 * 60 * 60 * 24;
326
                    Long quantidadeDeDiasDeDiferenca = diferencaEntreAsDatasEmMilisegundos / milisegundosDeUmDia;
327
                    return quantidadeDeDiasDeDiferenca.intValue();
328
                } catch (Exception e) {
329
                        return 0;
330
                }
331
        }
332
 
333
        public static Date calcularAhSomaDeDiasAhUmaData(Date data, Integer dias) {
334
                try {
335
                        Date dataRetornada = data;
336
                        dataRetornada.setTime(dataRetornada.getTime() + TimeUnit.DAYS.toMillis(dias));
337
                        return dataRetornada;
338
                } catch (Exception e) {
339
                        return null;
340
                }
341
        }
342
 
343
        public static Date calcularAhDiferencaDeDiasAhUmaData(Date data, Integer dias) {
344
                try {
345
                        Date dataRetornada = data;
346
                        dataRetornada.setTime(dataRetornada.getTime() - TimeUnit.DAYS.toMillis(dias));
347
                        return dataRetornada;
348
                } catch (Exception e) {
349
                        return null;
350
                }
351
        }
352
 
353
        public static Date calcularEhSubtrairDeHorasAhUmaData(Date data, Integer horas) {
354
                try {
355
                        Date dataRetornada = data;
356
                        dataRetornada.setTime(dataRetornada.getTime() - TimeUnit.HOURS.toMillis(horas));
357
                        return dataRetornada;
358
                } catch (Exception e) {
359
                        return null;
360
                }
361
        }
362
 
363
        public static Date calcularEhSubtrairDeHorasIhMinutosAhUmaData(Date data, Integer horas, Integer minutos) {
364
                try {
365
                        Date dataRetornada = data;
366
                        dataRetornada.setTime(dataRetornada.getTime() - TimeUnit.HOURS.toMillis(horas) - TimeUnit.MINUTES.toMillis(minutos));
367
                        return dataRetornada;
368
                } catch (Exception e) {
369
                        return null;
370
                }
371
        }
372
 
373
        public static long calcularDiferencaEntreDatas(Date dataInicial, Date dataFinal) {
374
                Calendar calendarDataInicial = new GregorianCalendar();
375
                calendarDataInicial.setTime(dataInicial);
376
                Calendar calendarDataFinal = new GregorianCalendar();
377
                calendarDataFinal.setTime(dataFinal);
378
        try {
379
            long horaInic = calendarDataInicial.getTimeInMillis();
380
            long horaFim = calendarDataFinal.getTimeInMillis();
381
            return horaFim - horaInic;
382
        } catch(Exception ex) {
383
                ex.printStackTrace();
384
        }
385
                return 0;
386
        }
387
 
388
        public static String calcularDiferencaEntreDatasRetornandoHorasEeMinutos(Date dataInicial, Date dataFinal) {
389
                long diferenca = calcularDiferencaEntreDatas(dataInicial, dataFinal);
390
                long diferencaHoras = diferenca/(60*60*1000);
391
                long diferencaMin = (diferenca /(60*1000)) - (diferencaHoras * 60);
392
                try {
393
                        return StringUtil.lpadTo("" + diferencaHoras, 2, '0')+ ":" + StringUtil.lpadTo("" + diferencaMin, 2, '0');
394
                } catch(Exception ex) {
395
                ex.printStackTrace();
396
                }
397
                return null;
398
        }
399
 
400
        public static void main(String[] args) {
401
                Date dataInicial = DataUtils.converterStringParaDataComHorario("25/01/2019 08:00:00");
402
                Date dataFinal = DataUtils.converterStringParaDataComHorario("25/01/2019 09:08:00");
403
                calcularDiferencaHoras(dataInicial, dataFinal);
404
        }
405
 
406
        public static void calcularDiferencaHoras(Date dataInicial, Date dataFinal) {
407
                Calendar calendarDataInicial = new GregorianCalendar();
408
                calendarDataInicial.setTime(dataInicial);
409
                Calendar calendarDataFinal = new GregorianCalendar();
410
                calendarDataFinal.setTime(dataFinal);
411
        try {
412
 
413
            long horaInic = calendarDataInicial.getTimeInMillis();
414
            long horaFim = calendarDataFinal.getTimeInMillis();
415
 
416
            long diferenca = horaFim - horaInic;
417
                long diferencaHoras = diferenca/(60*60*1000);
418
                long diferencaMin = (diferenca /(60*1000)) - (diferencaHoras * 60);
419
                System.out.printf("Horas: %d%nMinutos: %d%n", diferencaHoras, diferencaMin);
420
                System.out.println(StringUtil.lpadTo("" + diferencaHoras, 2, '0') + ":" + StringUtil.lpadTo("" + diferencaMin, 2, '0'));
421
        } catch(Exception ex) {
422
                ex.printStackTrace();
423
        }
424
    }
425
 
426
}