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:

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 
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.