View Javadoc

1   /*
2    * Criado em 26/10/2004
3    *
4    */
5   package comum.util;
6   
7   
8   import java.text.DateFormat;
9   import java.text.ParseException;
10  import java.text.SimpleDateFormat;
11  import java.util.Calendar;
12  import java.util.Date;
13  import java.util.GregorianCalendar;
14  
15  /**
16   * Classe com funções para manipulação de Data e hora.<br>
17   * 
18   * @author felipev
19   * @since 26/10/2004
20   * @version N/C
21   */
22  public abstract class Data {
23  	
24  	static int timeZone = -3;
25  	
26  	/**
27  	 * Converte uma String para um Date.<br>
28  	 * 
29  	 * @author N/C 
30  	 * @since N/C 
31  	 * @version N/C
32  	 * @param String data		- Data a ser formatada.
33  	 * @return java.Util.Date
34  	 */
35  	public static Date parseDate(String data){
36  		if (data.length()==10)//veio bem formatada
37  			return parseDate(data, "dd/MM/yyyy");
38  
39  		if (data.indexOf("/")==1){
40  			data= "0"+data;
41  		}
42  		if (data.indexOf("/", 3)==4){
43  			String aux = data;
44  			data = aux.substring(0, 3)+"0"+aux.substring(3);
45  		}
46  		if (data.length()==8){
47  			String aux = data;
48  			data = aux.substring(0, 6)+"20"+aux.substring(6);
49  		}
50  			
51  		return parseDate(data, "dd/MM/yyyy");
52  	}
53  	
54  	/**
55  	 * Converte uma String para um Date, seguindo um formato específico.<br>
56  	 * Ex.: String data = "14021982"<br>
57  	 *      String formato = "ddMMyyyy"<br>
58  	 * Retorna um objeto Date, com dia = 14, mês = 02, ano = 1982<br>
59  	 * 
60  	 * @author N/C
61  	 * @since N/C
62  	 * @version N/C
63  	 * @param String data
64  	 * @param String formato
65  	 * @return java.Util.Date
66  	 */
67  	public static Date parseDate(String data, String formato){
68          java.util.Date date = null;
69          try {
70              DateFormat formatter = new SimpleDateFormat(formato);
71              date = (java.util.Date)formatter.parse(data);
72          } catch (ParseException e) {            
73              return null;
74          }
75          return date;
76  	}
77  	
78  	/**
79  	 * Converte um Date para uma String no formato dd/mm/aaaa HH:mm:ss.<br>
80  	 * 
81  	 * @author N/C
82  	 * @since N/C
83  	 * @version N/C
84  	 * @param Date data		- Data a ser formatada.
85  	 * @return String 
86  	 */
87  	public static String parseDateHour(Date data){
88          String formato = "dd/MM/yyyy HH:mm:ss:SSS";
89          String strRetorno= null;
90          SimpleDateFormat formatter = new SimpleDateFormat(formato);
91          if ((data != null))
92              strRetorno = formatter.format((java.util.Date)data); 
93          else
94              strRetorno = "";
95          return strRetorno;	
96  	}
97  	
98  	/**
99  	 * Converte um String para um Date no formato dd/mm/aaaa HH:mm:ss.<br>
100 	 * 
101 	 * @author N/C
102 	 * @since N/C
103 	 * @version N/C
104 	 * @param String data	- Data a ser informada
105 	 * @return Date
106 	 */
107 	public static Date parseDateHour(String data){
108         java.util.Date date = null;
109         
110         try {
111             DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss:SSS");
112             date = (java.util.Date)formatter.parse(data);
113         } catch (ParseException e) {            
114             return null;
115         }
116         
117         return date;
118 	}
119 	
120 	/**
121 	 * Converte um String para um Date no formato dd/mm/aaaa HH:mm:ss.<br>
122 	 * 
123 	 * @author N/C
124 	 * @since N/C
125 	 * @version N/C
126 	 * @param String data	- Data a ser informada
127 	 * @return Date
128 	 */
129 	public static Date parseDateHourDate(String data){
130         Date date = null;
131         
132         try {
133             DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss:SSS");
134             date = new Date(formatter.parse(data).getTime());
135         } catch (ParseException e) {            
136             return null;
137         }
138         
139         return date;
140 	}
141 	/**
142 	 * Converte um Date para uma string no formato mm.ss.SSS
143 	 * 
144 	 * @author N/C
145 	 * @since N/C
146  	 * @version N/C
147  	 * @param Date data
148  	 * @return String
149  	 */
150     public static String parseDateHourSegundos(Date data){
151         String formato = "mm.ss.SSS";
152         String strRetorno= null;
153         SimpleDateFormat formatter = new SimpleDateFormat(formato);
154         if ((data != null))
155             strRetorno = formatter.format((java.util.Date)data); 
156         else
157             strRetorno = "";
158         return strRetorno;  
159     }
160     
161 	/**
162 	 * Converte um Date para uma String no formato dd/mm/aaaa.<br>
163 	 * 
164 	 * @author N/C
165 	 * @since N/C
166 	 * @version N/C
167 	 * @param Date data		- Data a ser formatada.
168 	 * @return String 
169 	 */
170 	public static String parseDate(Date data){
171         String formato = "dd/MM/yyyy";
172         String strRetorno= null;
173         SimpleDateFormat formatter = new SimpleDateFormat(formato);
174         if ((data != null))
175             strRetorno = formatter.format((java.util.Date)data); 
176         else
177             strRetorno = "";
178         return strRetorno;	
179 	}
180 
181 	
182 	/**
183 	 * Retorna um objeto Date com a data atual.<br>
184 	 * 
185 	 * @author N/C
186 	 * @since N/C
187 	 * @version N/C
188 	 * @return Date		- Data de hoje
189 	 */
190 	public static Date getDataAtual(){		 
191 		Date trialTime = new Date();
192 		Calendar calendar = getCalendar(trialTime);		 
193 		return calendar.getTime();		 
194 	}
195 
196 	/**
197 	 * Retorna um objeto Calendar com a data fornecida como parâmetro.<br>
198 	 * 
199 	 * @author N/C
200 	 * @since N/C
201 	 * @version N/C
202 	 * @param Date data 
203 	 * @return Calendar		- Objeto Calendar com a Data fornecida.
204 	 */
205 	public static Calendar getCalendar(Date data){
206 		 //String[] ids = TimeZone.getAvailableIDs(timeZone * 60 * 60 * 1000);
207 		 //SimpleTimeZone pdt = new SimpleTimeZone(timeZone * 60 * 60 * 1000, ids[0]);
208 		 //Calendar calendar = new GregorianCalendar(pdt);		 
209 		 //calendar.setTime(data);		 
210 		 return getGregorianCalendar(data);		 
211 	}
212 
213 	/**
214 	 * Retorna um objeto Calendario Gregoriano a partir de uma data fornecida como parâmetro
215 	 * utilizando o default locale e timezone.<br>
216 	 * 
217 	 * @author N/C
218 	 * @since N/C
219 	 * @version N/C
220 	 * @param Date data
221 	 * @return GregorianCalendar
222 	 */
223 	public static GregorianCalendar getGregorianCalendar(Date data) {
224 	    GregorianCalendar gCal = new GregorianCalendar();
225 	    gCal.setTime(data);
226 	    return gCal;
227 	}
228 	
229 	/**
230 	 * Soma ou subtrai uma quantidade de DIAS de uma determinada data.<br>
231 	 * 
232 	 * @author N/C
233 	 * @since N/C
234 	 * @version N/C
235 	 * @param int qtdeDias		- Dias que serão somados à data (números negativos para fazer substração).
236 	 * @param Date data			- Data a partir da qual será feita a operação
237 	 * @return Date				- Resultado da Operação
238 	 */
239 	public static Date addDias(int qtdeDias, Date data){
240 	     Calendar calendar = getCalendar(data);
241 	     calendar.add(Calendar.DATE, qtdeDias);
242 	     return calendar.getTime();
243 	}
244 
245 	/**
246 	 * Soma ou subtrai uma quantidade de MESES de uma determinada data.<br>
247 	 * 
248 	 * @author N/C
249 	 * @since N/C
250 	 * @version N/C
251 	 * @param int qtdeMeses		- Meses que serão somados à data (números negativos para fazer subtração).
252 	 * @param Date data			- Data a partir da qual será feita a operação.
253 	 * @return Date				- Resultado da Operação.
254 	 */
255 	public static Date addMeses(int qtdeMeses, Date data){
256 	     Calendar calendar = getCalendar(data);
257 	     calendar.add(Calendar.MONTH, qtdeMeses);
258 	     return calendar.getTime();
259 	}
260 
261 	/**
262 	 * Soma ou subtrai uma quantidade de ANOS de uma determinada data.<br>
263 	 * 
264 	 * @author N/C
265 	 * @since N/C
266 	 * @version N/C
267 	 * @param int qtdeAnos	- Anos que serão somados à data (números negativos para fazer subtração).
268 	 * @param Date data		- Data a partir da qual será feita a operação.
269 	 * @return Date			- Resultado da Operação.
270 	 */
271 	public static Date addAnos(int qtdeAnos, Date data){
272 	     Calendar calendar = getCalendar(data);
273 	     calendar.add(Calendar.MONTH, qtdeAnos);
274 	     return calendar.getTime();
275 	}
276 
277 	
278 	/**
279 	 * Verifica se a data passada como parâmetro é FUTURA.<br>
280 	 * 
281 	 * @author N/C
282 	 * @since N/C
283 	 * @version N/C
284 	 * @param Date data
285 	 * @return boolean
286 	 */
287 	public static boolean isFuturo(Date data){
288 		if(getDataAtual().after(data))
289 			return false;
290 		else
291 			return true;
292 	}
293 
294 	/**
295 	 * Verifica se a data passada como parâmetro é FUTURA.<br>
296 	 * 
297 	 * @author N/C
298 	 * @since N/C
299 	 * @version N/C
300 	 * @param String data
301 	 * @return boolean
302 	 */
303 	public static boolean isFuturo(String data){
304 		if(getDataAtual().after(parseDate(data)))
305 			return false;
306 		else
307 			return true;
308 	}
309 	
310 	/**
311 	 * Verifica se a data passada como parâmetro é PASSADA.<br>
312 	 * 
313 	 * @author N/C
314 	 * @since N/C
315 	 * @version N/C
316 	 * @param String data
317 	 * @return boolean
318 	 */
319 	public static boolean isPassado(String data){
320 		if(isFuturo(data))
321 			return false;
322 		else 
323 			return true;
324 	}
325 
326 	/**
327 	 * Verifica se a data passada como parâmetro é PASSADA.<br>
328 	 * 
329 	 * @author N/C
330 	 * @since N/C
331 	 * @version N/C
332 	 * @param Date data
333 	 * @return boolean
334 	 */
335 	public static boolean isPassado(Date data){
336 		if(isFuturo(data))
337 			return false;
338 		else 
339 			return true;
340 	}
341 	/**
342 	 * Converte o numero do mes para sua String abreviada.<br>
343 	 * Ex.: `2` para `FEV` .<br>
344 	 * 
345 	 * @author N/C
346 	 * @since N/C
347 	 * @version N/C
348 	 * @param int mes
349 	 * @return String
350 	 */
351 	public static String getAbreviaturaMes(int mes){
352 		switch(mes){
353 			case 1:
354 				return "JAN";
355 			case 2:
356 				return "FEV";
357 			case 3:
358 				return "MAR";
359 			case 4:
360 				return "ABR";
361 			case 5:
362 				return "MAI";
363 			case 6:
364 				return "JUN";
365 			case 7:
366 				return "JUL";
367 			case 8:
368 				return "AGO";
369 			case 9:
370 				return "SET";
371 			case 10:
372 				return "OUT";
373 			case 11:
374 				return "NOV";
375 			case 12:
376 				return "DEZ";
377 			default:
378 				return "";
379 		}	
380 	}
381 
382 	/**
383 	 * Converte o numero do mes para a String correspondente.<br>
384 	 * Ex.: '3' para 'Março'.<br>
385 	 * 
386 	 * @author N/C
387 	 * @since N/C
388 	 * @version N/C
389 	 * @param int mes
390 	 * @return String
391 	 */
392 	public static String getNomeMesExtenso(int mes){
393 		switch(mes){
394 			case 1:
395 				return "Janeiro";
396 			case 2:
397 				return "Fevereiro";
398 			case 3:
399 				return "Março";
400 			case 4:
401 				return "Abril";
402 			case 5:
403 				return "Maio";
404 			case 6:
405 				return "Junho";
406 			case 7:
407 				return "Julho";
408 			case 8:
409 				return "Agosto";
410 			case 9:
411 				return "Setembro";
412 			case 10:
413 				return "Outubro";
414 			case 11:
415 				return "Novembro";
416 			case 12:
417 				return "Dezembro";
418 			default:
419 				return "";
420 		}	
421 	}
422 
423 	/**
424 	 * Retorna o dia(int) do mes.<br>
425 	 * 
426 	 * @author N/C
427 	 * @since N/C
428 	 * @version N/C
429 	 * @param Date data
430 	 * @return int
431  	 */
432 	public static int getDia(Date data) {
433 		Calendar calendar = getCalendar(data);	   
434 	    return calendar.get(Calendar.DAY_OF_MONTH);
435 	}
436 
437 	/**
438 	 * Retorna o mes (int).<br>
439 	 * 
440 	 * @author N/C
441 	 * @since N/C
442  	 * @version N/C
443  	 * @param Date data
444  	 * @return int
445  	 */
446 	public static int getMes(Date data) {
447 		Calendar calendar = getCalendar(data);	   
448 	    return calendar.get(Calendar.MONTH);
449 	}
450 	
451 	/**
452 	 * Retorna o Ano(int).<br>
453 	 * 
454 	 * @author N/C
455 	 * @since N/C
456 	 * @version N/C
457 	 * @param Date data
458 	 * @return int
459 	 */
460 	public static int getAno(Date data) {
461 		Calendar calendar = getCalendar(data);	   
462 	    return calendar.get(Calendar.YEAR);
463 	}
464 	
465 	/**
466 	 * Retorna o horário no formato HH:MM.<br>
467 	 * 
468 	 * @author N/C
469 	 * @since N/C
470 	 * @version N/C
471 	 * @param Date data
472 	 * @return String
473 	 */
474 	public static String getHorario(Date data) {
475 		Calendar calendar = getCalendar(data);
476 		StringBuffer horaRetorno = new StringBuffer();
477 		StringBuffer minutoRetorno = new StringBuffer();
478 		
479 		int hora = calendar.get(Calendar.HOUR_OF_DAY);
480 		int minuto = calendar.get(Calendar.MINUTE);
481 				
482 		if( hora < 10 ) {
483 			horaRetorno.append("0").append(hora);
484 		} else {
485 			horaRetorno.append(hora);
486 		}
487 		
488 		if( minuto < 10 ) {
489 			minutoRetorno.append("0").append(minuto);
490 		} else {
491 			minutoRetorno.append(minuto);
492 		}
493 		
494 		return (horaRetorno.append(":").append(minutoRetorno)).toString(); 
495 	}
496 	
497 	/**
498 	 * Obter a hora atual.<br>
499 	 * 
500 	 * @author N/C
501 	 * @since N/C
502 	 * @version N/C
503 	 * @param boolean comSeparador
504 	 * @return String				- No formato hh:mm:ss
505 	 */
506 	public static String getHoraAtual(boolean comSeparador)	{
507 		Calendar cal = Calendar.getInstance();
508 		StringBuffer  hh = new StringBuffer(); 
509 		StringBuffer  mm = new StringBuffer(); 
510 		StringBuffer  ss = new StringBuffer(); 
511 		hh.append(cal.get(Calendar.HOUR_OF_DAY));
512 		mm.append(cal.get(Calendar.MINUTE));
513 		ss.append(cal.get(Calendar.SECOND));
514 
515 		if(mm.length() < 2)
516 			mm.insert(0, "0");
517 		if(hh.length() < 2)
518 			hh.insert(0, "0");
519 		if(ss.length() < 2)
520 			ss.insert(0, "0");
521 							
522 		if(comSeparador) {
523 			return (hh.append(":").append(mm).append(":").append(ss)).toString();
524 		}
525 		else {
526 			return (hh.append(mm).append(ss)).toString();
527 		}
528 	}
529 	
530 	/**
531 	 * Retorna o ultimo dia(int) do mes.<br>
532 	 * 
533 	 * @author N/C
534 	 * @since N/C
535 	 * @version N/C
536 	 * @param Date data
537 	 * @return int
538 	 */
539 	public static int getUltimoDiaMes(Date data){
540 	     Calendar calendar = getCalendar(data);	     
541 	     return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
542 	}
543 	
544 	/**
545 	 * Retorna o Dia da Semana(String) Abreviado.<br>
546 	 * ex.: Segunda e nao Segunda-feira<br>
547 	 * 
548 	 * @author N/C
549 	 * @since N/C
550 	 * @version N/C
551 	 * @param Date data
552 	 * @return String
553 	 */
554 	public static String getDiaSemanaNome(Date data) {   
555 	    switch ((getCalendar(data)).get(Calendar.DAY_OF_WEEK)) {
556 	    	case 1: return "Domingo";
557 	    	case 2: return "Segunda";
558 	    	case 3: return "Terça";
559 	    	case 4: return "Quarta";
560 	    	case 5: return "Quinta";
561 	    	case 6: return "Sexta";
562 	    	case 7: return "Sábado";
563 	    	default: return "";	    	
564 	    }
565 	}
566 	
567 	/**
568 	 * Retorna o Dia da Semana por completo.<br>
569 	 * Ex.: Segunda-feira, e nao Segunda.<br>
570 	 * 
571 	 * @author N/C
572 	 * @since N/C
573 	 * @version N/C
574 	 * @param Date data
575 	 * @return String
576 	 */
577 	public static String getDiaSemanaNomeExtenso(Date data) {   
578 	    switch ((getCalendar(data)).get(Calendar.DAY_OF_WEEK)) {
579 	    	case 1: return "Domingo";
580 	    	case 2: return "Segunda-feira";
581 	    	case 3: return "Terça-feira";
582 	    	case 4: return "Quarta-feira";
583 	    	case 5: return "Quinta-feira";
584 	    	case 6: return "Sexta-feira";
585 	    	case 7: return "Sábado";
586 	    	default: return "";	    	
587 	    }
588 	}
589 	
590 	/**
591 	 * Converte um Date para uma String no formato dd/mm/aaaa HH:mm:ss.<br>
592 	 * 
593 	 * @author N/C
594 	 * @since N/C
595 	 * @version N/C
596 	 * @param Date data		- Data a ser formatada.
597 	 * @return String
598 	 */
599 	public static String parseDateHourMinuteSecond(Date data){
600         String formato = "dd/MM/yyyy HH:mm:ss";
601         String strRetorno= null;
602         SimpleDateFormat formatter = new SimpleDateFormat(formato);
603         if ((data != null))
604             strRetorno = formatter.format((java.util.Date)data); 
605         else
606             strRetorno = "";
607         return strRetorno;	
608 	}
609 	
610 	
611     /**
612      * Compara duas Datas baseadas no Ano, mês e dia.
613      * Desconsidera horas, minutos, ...
614      *
615      * @param data a 
616      * @param   data1    <code>Date</code> primeira data a ser comparada.
617      * @param   data2    <code>Date</code> segunda data a ser comparada.
618      * @return  o valor <code>0</code> se o argumento data1 é igual ao argumento data2;
619      * 			um valor menor que <code>0</code> se o argumento data1 é menor que o argumento data2; 
620      *          e um valor maior que <code>0</code> se o argumento data1 é maior que o argumento data2.
621      * @since v8_00_b1
622      * @exception NullPointerException se <code>data</code> é nula.
623      * @author 05110500460
624      */
625 	public static int compareAnoMesDia(Date data1, Date data2){
626 				
627 		if (data1 == null || data2 == null )
628 			throw new NullPointerException();
629 		
630 //		String str1 = Data.parseDate(data1);
631 //		String str2 = Data.parseDate(data2);
632 		
633 		if (Data.getAno(data1)  > Data.getAno(data2) ) {
634 			return 1;
635 		} else if (Data.getAno(data1)  < Data.getAno(data2) ){
636 			return -1;
637 		} 
638 		
639 		if (Data.getMes(data1)  > Data.getMes(data2) ) {
640 			return 1;
641 		} else if (Data.getMes(data1)  < Data.getMes(data2) ){
642 			return -1;
643 		} 
644 		
645 		if (Data.getDia(data1)  > Data.getDia(data2) ) {
646 			return 1;
647 		} else if (Data.getDia(data1)  < Data.getDia(data2) ){
648 			return -1;
649 		} 
650 		
651 		// se chegou aqui é porque é não é nulo 
652 		return 0;
653 	}
654 }