要转换 Date
反对 LocalDate
或者 LocalDateTime
反之亦然,在 Java 中,你可以使用 java.time
Java 8 中引入的包。下面是有关如何执行这些转换的详细指南:
1. 转换 Date
到 LocalDate
使用 Instant
和 ZoneId
:
- 首先,转换
Date
到Instant
. - 然后,使用
Instant
创建一个LocalDate
与所需的ZoneId
.
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. 转换 LocalDate
到 Date
使用 ZoneId
和 Instant
:
- 转换
LocalDate
到ZonedDateTime
与所需的ZoneId
. - 然后,转换
ZonedDateTime
到Instant
并用它来创建一个Date
.
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. 转换 Date
到 LocalDateTime
使用 Instant
和 ZoneId
:
- 首先,转换
Date
到Instant
. - 然后,使用
Instant
创建一个LocalDateTime
与所需的ZoneId
.
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. 转换 LocalDateTime
到 Date
使用 ZoneId
和 Instant
:
- 转换
LocalDateTime
到ZonedDateTime
与所需的ZoneId
. - 然后,转换
ZonedDateTime
到Instant
并用它来创建一个Date
.
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. 总结
- 从
Date
到LocalDate
或者LocalDateTime
:- 转变
Date
到Instant
. - 使用
Instant
和ZoneId
创造LocalDate
或者LocalDateTime
.
- 转变
- 从
LocalDate
或者LocalDateTime
到Date
:- 使用
ZoneId
创造ZonedDateTime
. - 转变
ZonedDateTime
到Instant
. - 使用
Instant
创造Date
.
- 使用
这些方法确保转换尊重时区并维护正确的日期和时间信息。