No Java 8, uma biblioteca de data e hora totalmente nova foi introduzida por várias boas razões . Além de outras vantagens, a nova biblioteca fornece uma API melhor para operações como extrair ano, mês, dia de uma determinada data.
De um Date, para extrair campos individuais como ano, mês, dia (entre outros), a primeira coisa que devemos fazer é converter o Date para uma instancia de Calendar.
Date date = new Date(); // sua instancia Date
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Uma vez com uma instância de Calendar, nós podemos invocar diretamente o método get()
e fornecer o campo específico que queremos obter.
Nós podemos usar constantes presentes na classe Calendar para obter os campos específicos.
Para obter o ano, nós podemos invocar o método get()
passando como argumento o valor Calendar.YEAR
.
int ano = calendar.get(Calendar.YEAR);
Similarmente, para obter o mês, nós podemos invocar o método get()
passando como argumento o valor Calendar.MONTH
.
int mes = calendar.get(Calendar.MONTH);
Note, que em Calendar, os meses iniciam-se em zero. Este método irá retornar o valor 0 para representar Janeiro, e 11 para Dezembro.
Finalmente, para obter o dia, podemos invocar o método get()
passando como argumento o valor Calendar.DAY_OF_MONTH
.
int dia = calendar.get(Calendar.DAY_OF_MONTH);
O novo pacote java.time
contém uma série de classes que podem ser utilizadas para representar uma data.
Cada classe se difere pelas informações adicionais que armazena em adição a um objeto Date
.
O básico LocalDate
contém apenas a informação de data, enquanto LocalDateTime
contém informações da data e hora.
Similarmente, mais classes avançadas como OffsetDateTime
e ZonedDateTime
contém informações adicionais em UTC e informações sobre fuso horário, respectivamente.
De qualquer forma, todas essas classes oferecem suporte a métodos diretos para extrair informações de ano, mês e data.
Vamos explorar esses métodos para extrair informações de uma instância LocalDate
chamado localDate
.
Para extrair o ano, a classe LocalDate
simplesmente fornece o método getYear
:
int ano = localDate.getYear();
Similarmente, para obter o mês, podemos usar getMonthValue
:
int mes = localDate.getMonthValue();
Diferentemente de Calendar
, os meses em LocalDate
são indexados em 1. Para janeiro, é retornado 1, e para dezembro é retornado 12.
Finalmente, para obter o dia, podemos usar o método getDayOfMonth
:
int dia = localDate.getDayOfMonth();
Neste rápido (e simples) tutorial, nós exploramos como obter valores inteiros de ano, mês e dia do mês de um objeto Date
do Java.
Mostramos como extrair esses valores usando as antigas classes Date
e Calendar
, bem como a nova biblioteca de data e hora do Java 8.
O código fonte completo dos trechos usados neste tutorial está disponível no Github ou abaixo:
Date date = new Date();
// LocalDate localDate = LocalDate.now();
LocalDate localDate = date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
int ano = localDate.getYear();
System.out.println("ano = " + ano);
int mes = localDate.getMonthValue();
System.out.println("mes = " + mes);
int dia = localDate.getDayOfMonth();
System.out.println("dia = " + dia);