Pegando a data atual em Java
Entenda um pouco mais das diversas formas para gerar a data atual, utilizando algumas das funções da linguagem Java de programação.
Quando um aluno inicia um curso é gerada uma matrícula para ele no meu sistema:
public class Matricula {
private Aluno aluno;
private Curso curso;
private Date dataDeInscricao;
//métodos
Mas como faço para adicionar a data atual no momento em que o aluno se matricula em um curso? É simples! Precisamos apenas fazer uma instância para a classe Date
:
public class Matricula {
//atributos
private Date dataDeInscricao = new Date();
//métodos
Testando o método geraDataDeInscricao()
, qual será o resultado?
Matricula matricula = new Matricula(); System.out.println(matricula.getDataDeInscricao());
Resultado:
> Wed Nov 25 10:16:55 BRST 2015
Ótimo, funcionou! Quando fazemos uma instância da classe Date
, ela coleta as informações de: dia, mês, ano, horas, minutos e segundos de acordo com o Time Zone configurado na máquina com precisão de milissegundos, ou seja, ele vai pegar todas essas informações naquele instante!
Embora a classe Date
funcione, não é recomendado fazer instâncias dela para gerar a data atual, pois é considerada uma solução Deprecated, ou seja, uma solução obsoleta. Sugerimos utilizar a classe Date
apenas para questões de compatibilidade. Para outras situações, é recomendado o uso da classe Calendar
, utilizamos o seu método estático getInstance()
para pegar a data atual:
public class Matricula {
// atributos
private Calendar dataDeInscricao = Calendar.getInstance();
//métodos
}
Se testarmos novamente a classe Matricula
:
Matricula matricula = new Matricula(); System.out.println(matricula.getDataDeInscricao().getTime());
Resultado:
> Wed Nov 25 10:55:14 BRST 2015
Funcionou como o esperado. Existe também a classe GregorianCalendar,que é uma subclasse de Calendar
, ou seja, uma classe mais específica que abstrai as necessidades para casos em que o seu calendário seja gregoriano. Para alterar o calendário só precisa mudar de Calendar
para GregorianCalendar
e, em vez de usar o método estático getInstance(),
precisamos fazer a instância da classe GregorianCalendar
:
public class Matricula {
// atributos
private GregorianCalendar dataDeInscricao = new GregorianCalendar();
//métodos
}
Testando novamente a classe Matricula
:
Matricula matricula = new Matricula();
System.out.println(matricula.getDataDeInscricao().getTime());
Resultado:
> Wed Nov 25 10:58:17 BRST 2015
A data é impressa com sucesso! Mas, além do Date
e do Calendar
, é possível utilizar a classe LocalDateTime
disponível a partir do Java 8, por meio do seu método estático now(),
que coleta a informação de data atual de acordo com as informações do relógio do sistema operacional.
public class Matricula {
// atributos
private LocalDate dataDeInscricao = LocalDate.now();
//métodos
}
Testando novamente:
Matricula matricula = new Matricula();
System.out.println(matricula.getDataDeInscricao());
Resultado
> 2015-11-25T11:05:36.693
Funcionou como esperado! Como podemos ver, a impressão do LocalDateTime
é mais sofisticada e apresenta um formato mais legível.
Vimos diversas formas para gerar a data atual utilizando Java, porém algumas são consideradas Deprecated e só são utilizadas apenas para compatibilidade, como é o caso da classe Date
e também soluções mais sofisticadas como é o caso da LocalDateTime
disponível a partir do Java 8. E aí, qual solução você gostou mais?
Há um post da Caelum que detalha essa nova API do Java 8. Pensando nisso tudo, o criador da Caelum, Paulo Silveira, resolveu criar um curso de Java 8 e suas bibliotecas com mais 1500 alunos e 99% de recomendação.