在 Java 中,Date 类型是表示日期和时间的类,而 LocalDate 和 LocalDateTime 是从 Java 8 开始引入的新日期时间 API 中的类。为了在不同的 API 之间进行转换,我们可以使用一些简单的方法。下面我们来详细介绍一下它们之间的相互转换。

Date类型转LocalDate或LocalDateTime类型

要将 Date 类型转换为 LocalDate 或 LocalDateTime 类型,我们可以使用 Instant 类来辅助完成转换。Instant 类是 Java 8 中引入的用于表示时间戳的类。

使用以下方法将 Date 类型转换为 LocalDate:

1
2
3
Date date = new Date();
Instant instant = date.toInstant();
LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();

使用以下方法将 Date 类型转换为 LocalDateTime:

1
2
3
Date date = new Date();
Instant instant = date.toInstant();
LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();

示例 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

public class Tests {
public static void main(String[] args) {
Date date = new Date();
Instant instant = date.toInstant();

LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();

System.out.println(localDate);
System.out.println(localDateTime);
}
}
/*
此代码示例执行结果如下:

2022-11-20
2022-11-20T00:26:38.631

*/

LocalDate或LocalDateTime类型转Date类型

要将 LocalDate 或 LocalDateTime 类型转换为 Date 类型,我们可以使用 Date 类的 from() 方法。此方法将根据指定的时区和时间生成Date对象。

使用以下方法将 LocalDate 类型转换为 Date:

1
2
LocalDate localDate = LocalDate.now();
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

使用以下方法将 LocalDateTime 类型转换为 Date:

1
2
LocalDateTime localDateTime = LocalDateTime.now();
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

示例 2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

public class Tests2 {
public static void main(String[] args) {
LocalDate localDate = LocalDate.now();
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
System.out.println(date);

LocalDateTime localDateTime = LocalDateTime.now();
Date date2 = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
System.out.println(date2);
}
}
/*
此代码示例执行结果如下:

Sun Nov 20 00:00:00 CST 2022
Sun Nov 20 00:28:15 CST 2022

*/

请注意,上述两个代码示例中的ZoneId.systemDefault()表示使用系统默认时区。您可以根据需要替换为相应的时区。

通过以上方法,你可以在 Java 中实现 Date 类型与 LocalDate 或 LocalDateTime 之间的相互转换。这使得在不同的日期时间 API 之间进行操作和处理更加方便灵活。

希望本文能对您有所帮助!

(END)