Você está na página 1de 3

Manipulando datas em Java

Para quem está começando, trabalhar com datas em Java pode ser um pouco complicado, já
que a classe Date não fornece todos os recursos necessários. Para completá-la é também
utilizada a classe Calendar, que é uma classe abstrata que permite a manipulação de datas de
forma mais fácil.

Date(java.util.Date)

A classe Date armazena uma data e hora, que internamente é armazenada com um inteiro long
que é o numero de milissegundos que se passou desde 01/01/1970.

Esta classe é bem simples de se trabalhar, mas muitos de seus métodos foram depreciados por
não trabalhar muito bem com internacionalização e etc.

Para obter a data atual se basta criar um objeto Date sem nenhum parâmetro.

Date d = new Date();

Calendar(java.util.Calendar)

A classe Calendar sendo uma classe abstrata não pode ser instanciada com o operador new, ela
deve ser criada utilizando um operador estático sobrecarregado getInstance(). Na maioria das
vezes você vai receber uma instância de Java.util.GregorianCalendar.

Calendar c = Calendar.getIntance();

Com a instância de Calendar devemos configurar uma data e podemos fazer isso de duas
formas:

Métodos set

c.set(ano,mes,dia);
c.set(ano,mês,dia,hora,minuto);
c.set(ano,mês,dia,hora,minuto,segundo);

Método setTime

c.setTime(new Date() );

A classe Calendar também nos fornece várias constantes que utilizaremos para manipular uma
data entre elas.

Com a data devidamente configurada podemos realizar diversas operações com a data:

Para adicionar ou subtrair um dia, hora, mês ou ano utilizamos o método add. O método add
aceita dois parâmetros, sendo o primeiro um constante inteira que representa a unidade da
data que queremos modificar(dia, mês , ano, etc…) e o segundo quantas vezes será
adicionada/subtraída esta unidade.

A unidade é informada utilizando constantes fornecidas pela classe Calendar que pode ser:

Dia:

Calendar.DAY_OF_MONTH
Calendar.DAY_OF_WEEK
Calendar.DAY_OF_YEAR
Mês:

Calendar.MONTH

Ano:

Calendar.YEAR

Hora:

Calendar.HOUR
Calendar.HOUR_OF_DAY

Segundos:

Calendar.SECOND

Veja o exemplo abaixo:

Date d= new Date();


Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_YEAR,5 );//adicionamos 5 dias a data aual
c.add(Calendar.MONTH,3 );//adicionamos 3 mêses a data atual
c.add(Calendar.YEAR,1 );//adicionamos 1 ano a data atual

DateFormat(java.text.DateFormat)

Bom agora sabemos como manipula datas, agora precisamos formatar a data para
apresentação. A classe DateFormat nos fornece uma maneira simples de formatá-la e permite a
internacionalização a partir da classe Locale.

Date d = new Date();


Calendar c = Calendar.getInstance();
c.setTime(d);

DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
System.out.println( df.format(c.getTime()) );

Para obtermos uma String da data utilizamos o método format que retorna uma String no
formato especificado no método getDateInstance(). A saída do exemplo acima será algo como
03/04/10.

A classe DateForma nos fornece vários tipos de formato para data como:

Dateformat.SHORT // 03/04/10
Dateformat.MEDIUM // 03/04/2010
Dateformat.LONG //3 de Abril de 2010
Dateformat.FULL //Sábado, 3 de Abril de 2010

Embora para muitos casos estes formatos serão suficientes algumas vezes necessitamos de
uma formato vem personalizado. Isso pode ser feio através de um subclasse de DateFormat a
SimpleDateFormat.

Date hoje = new Date();


SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy
HH:mm:ss");
System.out.println( sdf.format(hoje));
O construtor de SimpleDateFormat recebe uma String que representa o formato da data. Os
símbolos utilizados para cada campo da data pode ser visto na tabela abaixo abaixo:
Simbolo Significado Apresentação Exemplo
G era designator (Text) AD
Y year (Number) 1996
M month in year (Text & Number) uly & 07
d day in month (Number) 10
h hour in am/pm (1~12) (Number) 12
H hour in day (0~23) (Number) 0
m minute in hour (Number) 30
s second in minute (Number) 55
S millisecond (Number) 978
E day in week (Text) Tuesday
D day in year (Number) 189
F day of week in month (Number) 2 (2nd Wed in July)
w week in year (Number) 27
W week in month (Number) 2
a am/pm marker (Text) PM
k hour in day (1~24) (Number) 24
K hour in am/pm (0~11) (Number) 0
z time zone (Text) Pacific Standard Time

Como vimos o dia da semana pode ser escrito por extenso, que língua ele será utilizada?
Normalmente o inglês, mas se quisermos que seja na língua de um local diferente?
Para isso utilizaremos a internacionalização com a classe Locate que recebe em seu construtor
a língua e o país que queremos utilizar:

Locale brasil = new Locale("pt","br");//portugues do brasil


Locale japao = new Locale("ja");// japao

O objeto locale de Locale pode ser utilizado tanto com a classe DateFormat quanto com a
classe SimpleDateFormat.

Date hoje = new Date();


SimpleDateFormat sdf = new SimpleDateFormat("E dd ",new
Locale("pt","br"));
System.out.println( sdf.format(hoje));

DateFormat df = DateFormat.getDateInstance(DateFormat.FULL,new
Locale("pt","br"));
System.out.println( df.format(hoje));

Para finalizar como covertermos uma String em um objeto Date

Date d = new Date();


SimpleDateFormat df = new SimpleDateFormat("DD/MM/yyyy");
try {
d = df.parse("25/03/2010");
} catch (ParseException ex) {
ex.printStackTrace();

}
System.out.println( df.format(d));
O métdo parse da classe DateFormat e recebe uma string e convertepara um objeto Date.

Você também pode gostar