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);