Pegando a data atual em Java

(Última atualização em: 20 de janeiro de 2017)

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.

Content Editor at Alura and Software Developer

Próximo ArtigoDicas de SEO que eu devia ter escutado no início de minha carreira