terça-feira, 26 de agosto de 2008

Trabalhando com datas em Java

AVISO 29/11/2014 - Com o Java 8 foram feitas várias melhorias na API de datas do Java. Pretendo mostrar exemplos destas melhorias em outra postagem. O conteúdo abaixo serve para as versões anteriores ao Java 8.

Vejam este link para informações sobre a nova API:
http://blog.caelum.com.br/conheca-a-nova-api-de-datas-do-java-8/



Você já teve que trabalhar com datas em Java e ficou confuso? Eu também.

Por isso vou falar aqui sobre algumas classes Java que são usadas para trabalhar com datas: Date, Calendar e SimpleDateFormat.


Classe java.util.Date:

Esta classe causa muita confusão. Apesar do nome dela ser Date, hoje em dia quase tudo nela está obsoleto. Na verdade esta classe tem a função de armazenar um inteiro longo que representa uma data com precisão de milisegundos.


Classe java.util.Calendar:

Com a classe Calendar podemos obter data e hora do sistema. A classe Calendar representa um calendário onde você pode obter várias informações sobre a data como dia do mês, dia da semana, dia do ano, mês, ano, hora, minuto, etc.

Além disso, com esta classe é possível definir um fuso horário, o que é importante para determinar a data correta.

Exemplo de uso da classe Calendar:
Calendar cal = Calendar.getInstance();
System.out.println(cal.get(Calendar.DAY_OF_MONTH));
System.out.println(cal.get(Calendar.MONTH));
System.out.println(cal.get(Calendar.YEAR));
//Saída:
//dia = 26
//mes = 7 (agosto)
//ano = 2008

Note que a contagem dos meses começa do zero, por isso agosto é representado com o número 7.

Além disso, Calendar.getInstance(); sempre retorna a data e hora atual do sistema. Se for necessário alterar a data então deve ser usado o método setTime().


Classe java.text.SimpleDateFormat:

Muitas vezes precisamos obter a data a partir de uma string em algum formato do tipo dia/mês/ano. É para isso que existe a classe SimpleDateFormat. Com esta classe podemos definir um pattern do tipo dd/MM/yyyy, que representa o formato da data que queremos utilizar.

O código abaixo mostra um exemplo:

SimpleDateFormat date1 = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat date2 = new SimpleDateFormat("ddMMyyyy");
SimpleDateFormat date3 = new SimpleDateFormat("yyyy-MM-dd");

Date d1 = date1.parse("26/08/2008");
Date d2 = date2.parse("26082008");
Date d3 = date3.parse("2008-08-26");

System.out.println("data 1 = "+date1.format(d1));
System.out.println("data 2 = "+date2.format(d2));
System.out.println("data 3 = "+date3.format(d3));

//Saída:
//data 1 = 26/08/2008
//data 2 = 26082008
//data 3 = 2008-08-26

Existem vários patterns possíveis. Note que o M do exemplo acima tem que ser maíusculo pois ele representa o mês, m minúsculo representa minutos. Veja a documentação da classe para maiores informações.

O exemplo abaixo mostra como obter as informações de data a partir de uma string, usando as 3 classes mencionadas acima:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String dataStr = "01/01/2008";
Date date = dateFormat.parse(dataStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

System.out.println("dia = " + calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("mes = " + calendar.get(Calendar.MONTH));
System.out.println("ano = " + calendar.get(Calendar.YEAR));

//Saída:
//dia = 1
//mes = 0 (janeiro)
//ano = 2008


Neste post foram apresentados exemplos práticos de como trabalhar com datas em Java. Espero ter ajudado e até a próxima.


Informações mais detalhadas sobre datas podem ser encontradas aqui (em inglês):
http://www.odi.ch/prog/design/datetime.php

4 comentários:

Anônimo disse...

Cara, este post pode até ser antigo, mas me quebrou uma árvore!!!

Abraços,

Vanderson.

javístico disse...

É bom saber que foi útil!

Obrigado por visitar o blog!

Anônimo disse...

cara, valeu mesmo tá......

Carlos disse...

Obrigado pela visita. Pretendo fazer algumas atualizações no blog em breve. Se tiverem sugestões de tópicos é só falar.