quinta-feira, 15 de janeiro de 2009

JAVA: Trabalhando com Data/Hora

Tive a necessidade de comparar datas em JAVA, uma forma rápida e fácil de fazer isso é usando classe Calendar.

A Calendar é uma classe abstrata, com ela pode-se modificar uma data/hora em dias, minutos, meses e etc. Segue um exemplo de como comparar duas datas usando a classe Calendar do java:

CalendarExemplo1.java

1 import java.util.Calendar;
2 import java.util.Date;
3
4 public class CalendarExemplo1 {
5
6 public static void main(String[] args) {
7
8 Calendar data1 = Calendar.getInstance();
9 data1.add(Calendar.DAY_OF_MONTH, 2);
10
11 Calendar data2 = Calendar.getInstance();
12 data2.add(Calendar.HOUR, 1);
13
14 int result = data1.compareTo(data2);
15 String msg = "";
16
17 if (result == 0)
18 {
19 msg = "Data 1 é igual que Data 2";
20 }
21 else if (result > 0)
22 msg = "Data1 é maior que Data 2";
23 else
24 msg = "Data 1 é menor que Data 2";
25
26 System.out.println("Data/Hora Atual: " + new Date());
27 System.out.println("Data 1 : " + data1.getTime());
28 System.out.println("Data 2 : " + data2.getTime());
29 System.out.println(msg);
30 }
31 }


Resultado:

Data/Hora Atual: Tue Sep 23 14:14:06 GMT-03:00 2008
Data 1 : Thu Sep 25 14:14:06 GMT-03:00 2008
Data 2 : Tue Sep 23 15:14:06 GMT-03:00 2008
Data1 é maior que Data 2


Os métodos mais utilizados da Calendar para modificar os valores das datas são o add e o roll.
Com método add pode-se somar ou subtrair unidades de tempo das datas. Exemplo:

CalendarExample2.java

1 import java.util.Calendar;
2 import java.util.Date;
3
4 public class CalendarExemplo2 {
5
6 public static void main(String[] args) {
7
8 //atrasa em 1 horas e 30 minutos a hora atual
9 Calendar cal = Calendar.getInstance();
10 cal.add(Calendar.HOUR, -1);
11 cal.add(Calendar.MINUTE, -30);
12
13 //obtem a data e hora em milisegundos
14 long d1= cal.getTimeInMillis();
15 long d2= new Date().getTime();
16
17 //calcula a diferença enter as datas
18 long diff = (d2-d1);
19
20 //converte de ms para min. (1ms/1000)/60
21 long minute = (long)(diff*1e-3)/60;
22
23 System.out.print("Dif. temporal (min): " + minute);
24 }
25 }


Observe que nas linhas 10 e 11 eu estou atrasando o horário atual em 1 hora e 30 minutos. O calculo da diferença temporal é feito em milisegundos (linha 18) e depois convertido em minutos para a exibição (linha 21).

Resultado:

Dif. temporal (min): 90


O resultado mostra a diferença entre as duas datas em minutos foi de 90 minutos.

O método roll faz a chamada "rolagem" da unidade de tempo, sem alterar as demais unidades. Por exemplo, pode-se pedir para que seja rolado 10 meses a frente, isso é feito alterando-se somente a unidade mês, o ano e o dia vão continuar os mesmos. Exemplo:

CalendarExample3.java


1 import java.util.Calendar;
2
3 public class CalendarExemplo3 {
4
5 public static void main(String[] args) {
6
7 Calendar cal = Calendar.getInstance();
8 System.out.println(cal.getTime());
9
10 //"rolagem" do mês em 5 unidades
11 cal.roll(Calendar.MONTH, 5);
12 System.out.print(cal.getTime());
13 }
14 }


Resultado:

Tue Sep 23 14:16:08 GMT-03:00 2008
Sat Feb 23 14:16:08 GMT-03:00 2008


A rolagem da unidade de tempo mês é feita na linha 11 do programa CalendarExample3.java. Perceba no resultado que a data iniciou no mês de setembro, contou-se 5 meses a frente, a data final foi para o mês de fevereiro, sem que o ano se modificasse.

Com a classe Calendar é possível fazer a diferenças entre datas e horas de forma fácil e intuitiva, bastando apenas indicar a unidade de tempo e o quando será adicionado ou retirado.

Download dos códigos fonte: calendar_src.zip

Para mais detalhes sobre as demais funcionalidades da classe Calendar, consulte o java doc no endereço: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html

Nenhum comentário: