sábado, 7 de maio de 2011

Data e Horas - Java


Vitor Yudi Hansen

Lidando com Datas e Horas em Java

java.util.Date

Primeiro nós temos a classe Date em java.util que representa uma data simples em java. Podemos criar uma variável data assim:
java.util.Date x;
Se colocarmos import java.util.*; poderemos omitir na declaração da variável ficando assim:
Date x;
Assim podemos criar um objeto para armazenar nesta variável:
x=new Date();
No momento da criação do objeto Date, o sistema armazena no mesmo a Data/Hora do relógio do computador. Podemos então mostrar a hora atual:
Date x=new Date();
System.out.println(x); 

java.text.SimpleTextFormat()

Mas como colocar uma data digitada pelo usuário em uma variável Date? Temos que usar conversores. A classe java.text.SimpleTextFormat() nos servirá:
import java.util.*;
import java.text.*;
...
String x=request.getParameter("dataUsuario"); //pegando dados de um formulário WEB
SimpleDateFormat sdf1= new SimpleDateFormat("dd/MM/yyyy"); //você pode usar outras máscaras
Date dataUsuario=sdf1.parse(stx);
O contrário também é importante: mostrar a data em forma de texto. SimpleDateFormat também serve para isso:
String x=request.getParameter("dataUsuario"); //pegando dados de um formulário WEB
SimpleDateFormat sdf1= new SimpleDateFormat("dd/MM/yyyy"); //você pode usar outras máscaras veja documentação abaixo
Date y=new Date();
System.out.println(sdf1.format(y));

java.util.GregorianCalendar

A classe Date é bem simples e serve para armazenar datas apenas. Ainda temos que manipular as datas não é? Tipo acrescentar 10 dias, verificar qual o dia da semana, e coisas assim. Para isso vamos usar a classe GregorianCalendar.
GregorianCalendar gc=new GregorianCalendar();
Como a classe Date, quando um objeto é criado a data/hora do sistema é assumido automaticamente. Algumas funções da classe são muito úteis. Vamos dar uma olhada:
GET. Obter o valor de um dos componentes da Data, como dia da semana, dia do mês, hora, mês ou qualquer outra coisa:
GregorianCalendar gc=new GregorianCalendar();
        System.out.println(gc.get(gc.DAY_OF_WEEK)); //Mostra qual o dia da semana 1=domingo, 2=segunda, etc
Além do dia da semana, é possível mostrar a hora (gc.HOUR), minuto (gc.MINUTES), etc. Veja na documentação abaixo os outros valores de campo disponíveis.
ADD. Adicionar um ou mais dias, horas, mês ou qualquer outra coisa a uma data:
GregorianCalendar gc=new GregorianCalendar();
        gc.add(gc.MONTH, 2); //Adiciona 2 meses à data atual
Além de gc.MONTH, é possível adicionar horas (gc.HOUR), minutos (gc.MINUTES), etc. É lógico que adicionando valores negativos, você subtrai os valores!
IS LEAP YEAR. Verifica se um ano é bissexto.
GregorianCalendar gc=new GregorianCalendar();
        System.out.println(gc.isLeapYear(2009)); // imprime falso. 2009 não é bissexto.
Acho que já deu para entender como funciona. Outras funções disponíveis:
  • SET – mudar o valor de uma data. gc.set(10,03,2009); ou gc.set(10,03,2009,10,30); ou gc.set(gc.HOUR,11);
  • AFTER/BEFORE – verificar se um data é depois ou antes de outrar. gc.after(gc2) gc é depois de gc2?
  • GETMAXIMUN – obter o maior valor disponível para um campo considerando os valores atuais dos outros. gc.getMaximum(gc.DATE); retornaria 28 se o mês fosse fevereiro de um ano não bissexto.

Por fim, para juntar os dois, GregorianCalendar e Date, utilizamos duas funções:
GregorianCalendar gc=new GregorianCalendar();
Date d1=gc.getTime(); //"Pega" a data do GregorianCalendar para uma variável Date
gc.setTime(d1); //Armazena a data de d1 para o GregorianCalendar gc.
Mais informações sobre Date, GregorianCalendar e SimpleDateFormat você pode encontrar na documentação do Java em inglês: