一.简述
Date对象表示特定的日期和时间,而LocalDate(Java8)对象只包含没有任何时间信息的日期。
因此,如果我们只关心日期而不是时间信息,则可以在Date和LocalDate之间进行转换。
二.Date转LocalDate
如果要将Java.util.Date转换为java.time.LocalDate,可以使用以下步骤:
1)将java.util.Date转换为ZonedDateTime。
2)使用它的toLocalDate()方法从ZonedDateTime获取LocalDate。
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package insping;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
// atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。
LocalDate localDate = instant.atZone(zoneId).toLocalDate();
System.out.println("Date = " + date);
System.out.println("LocalDate = " + localDate);
}
}
结果:
Date = Fri Jun 16 15:29:05 CST 2017
LocalDate = 2017-06-16
三.LocalDate转Date
现在,如果要将LocalDate转换回java.util.Date,可以使用以下步骤:
1)使用ZonedDateTime将LocalDate转换为Instant。
2)使用from()方法从Instant对象获取Date的实例
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22package insping;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
public class Test {
public static void main(String[] args) {
ZoneId zoneId = ZoneId.systemDefault();
LocalDate localDate = LocalDate.now();
ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
Date date = Date.from(zdt.toInstant());
System.out.println("LocalDate = " + localDate);
System.out.println("Date = " + date);
}
}
结果:
LocalDate = 2017-06-16
Date = Fri Jun 16 00:00:00 CST 2017