Para converter um Date
opor-se a LocalDate
ou LocalDateTime
e vice-versa em Java, você pode usar o java.time
pacote introduzido no Java 8. Aqui está um guia detalhado sobre como realizar essas conversões:
1. Conversão Date
para LocalDate
Usando Instant
e ZoneId
:
- Primeiro, converta o
Date
para umInstant
. - Então, use o
Instant
para criar umLocalDate
com o desejadoZoneId
.
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
public class DateToLocalDate {
public static void main(String[] args) {
Date date = new Date(); // current date
Instant instant = date.toInstant();
LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println("Date: " + date);
System.out.println("LocalDate: " + localDate);
}
}
2. Conversão LocalDate
para Date
Usando ZoneId
e Instant
:
- Converta o
LocalDate
para umZonedDateTime
com o desejadoZoneId
. - Depois, converta o
ZonedDateTime
para umInstant
e use-o para criar umDate
.
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
public class LocalDateToDate {
public static void main(String[] args) {
LocalDate localDate = LocalDate.now(); // current date
ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
Date date = Date.from(zonedDateTime.toInstant());
System.out.println("LocalDate: " + localDate);
System.out.println("Date: " + date);
}
}
3. Conversão Date
para LocalDateTime
Usando Instant
e ZoneId
:
- Primeiro, converta o
Date
para umInstant
. - Então, use o
Instant
para criar umLocalDateTime
com o desejadoZoneId
.
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class DateToLocalDateTime {
public static void main(String[] args) {
Date date = new Date(); // current date
Instant instant = date.toInstant();
LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println("Date: " + date);
System.out.println("LocalDateTime: " + localDateTime);
}
}
4. Conversão LocalDateTime
para Date
Usando ZoneId
e Instant
:
- Converta o
LocalDateTime
para umZonedDateTime
com o desejadoZoneId
. - Depois, converta o
ZonedDateTime
para umInstant
e use-o para criar umDate
.
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
public class LocalDateTimeToDate {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now(); // current date and time
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
Date date = Date.from(zonedDateTime.toInstant());
System.out.println("LocalDateTime: " + localDateTime);
System.out.println("Date: " + date);
}
}
5. Resumo
- De
Date
paraLocalDate
ouLocalDateTime
:- Converter
Date
paraInstant
. - Usar
Instant
comZoneId
para criarLocalDate
ouLocalDateTime
.
- Converter
- De
LocalDate
ouLocalDateTime
paraDate
:- Usar
ZoneId
para criarZonedDateTime
. - Converter
ZonedDateTime
paraInstant
. - Usar
Instant
para criarDate
.
- Usar
Esses métodos garantem que as conversões respeitem o fuso horário e mantenham as informações corretas de data e hora.