Lidando com Datas e Horas em Java
java.util.Date
Vamos lá,
Primeiro nós temos a classe Date em java.util que representa uma data simples em java. Podemos criar uma variável data assim:
Se colocarmos import java.util.*; poderemos omitir na declaração da variável ficando assim:
Assim podemos criar um objeto para armazenar nesta variável:
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
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.
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.
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.