目录

Java-8-新特性Java-LocalDate-转-Date

【Java 8 新特性】Java LocalDate 转 Date

Java LocalDate 转 Date

在这一页,我们将提供如何将 java.time.LocalDate 转换成 java.util.Date

LocalDate 表示一个格式为 yyyy-MM-dd 的日期,如 2019-05-08

我们可以使用以下方法和构造函数来创建一个 Date 对象。

1. Date.from(instant)
要从 Instant 对象中获取 Date 的一个实例。我们可以使用 ZonedDateTimeTimestamp 来获得 InstantZonedDateTimeTimestamp 可以使用 LocalDateTime 获得, LocalDateTime 可以使用 LocalDate 获得。
2. Date(long date)
使用构造函数创建 Date 对象并初始化它以表示指定的毫秒数。我们可以使用 Timestamp.getTime() 来获得毫秒数的时间。

1. 使用 LocalDate.atTime

LocalDate.atTime 方法将该日期与给定的时间相结合,创建一个 LocalDateTime

LocalDateTime.atZone 将这个日期时间与一个时区结合起来,创建一个 ZonedDateTime

ZonedDateTime.toInstant 将这个日期时间转换为一个 Instant

现在我们将把这个 Instant 实例传递给 Date.from 方法,它将返回一个 java.util.Date 实例。

例:

LocalDate localDate = LocalDate.parse("2019-05-08");
Instant instant = localDate.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant();
Date date = Date.from(instant);
System.out.println(date); //Wed May 08 00:00:00 IST 2019 

2. 使用 LocalDate.atStartOfDay

例1: LocalDate.atStartOfDay(zone) 根据时区的规则,返回从该日期开始的最早有效时间的分区日期时间( time-zone )。

LocalDate localDate = LocalDate.parse("2019-05-08");
Instant instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
Date date = Date.from(instant);
System.out.println(date); //Wed May 08 00:00:00 IST 2019 

例2: LocalDate.atStartOfDay() 将这个日期与午夜的时间结合起来,在这个日期的开始创建一个 LocalDateTime

LocalDate localDate = LocalDate.parse("2019-05-08");
Instant instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Date date = Date.from(instant);
System.out.println(date); //Wed May 08 00:00:00 IST 2019 

3. 使用 LocalDateTime.of

LocalDateTime.of 从一个日期和时间获得一个 LocalDateTime 的实例。

例:

LocalDate localDate = LocalDate.parse("2019-05-08");
Instant instant = LocalDateTime.of(localDate, LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant();
Date date = Date.from(instant);
System.out.println(date); //Wed May 08 00:00:00 IST 2019 

4. 使用 Timestamp.valueOf

Timestamp.valueOf(dateTime)LocalDateTime 对象中获得一个 Timestamp 的实例。

例1: 使用 LocalDate.atTime 方法对 LocalDateTime 进行实例化。

LocalDate localDate = LocalDate.parse("2019-05-08");
Instant instant = Timestamp.valueOf(localDate.atTime(LocalTime.MIDNIGHT)).toInstant();
Date date = Date.from(instant);
System.out.println(date); //Wed May 08 00:00:00 IST 2019 

例2: 使用 LocalDateTime.of 方法对 LocalDateTime 进行实例化。

LocalDate localDate = LocalDate.parse("2019-05-08");
Instant instant = Timestamp.valueOf(LocalDateTime.of(localDate, LocalTime.MIDNIGHT)).toInstant();
Date date = Date.from(instant);
System.out.println(date); //Wed May 08 00:00:00 IST 2019 

例3: 使用 Timestamp.getTime() 方法创建 Date

LocalDate localDate = LocalDate.parse("2019-05-08");
Timestamp timestamp = Timestamp.valueOf(localDate.atTime(LocalTime.MIDNIGHT));
Date date = new Date(timestamp.getTime());
System.out.println(date); //Wed May 08 00:00:00 IST 2019 

完整示例

LocalDateToDate.java

import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Date;
public class LocalDateToDate {
  public static void main(String[] args) {
	LocalDate localDate = LocalDate.parse("2019-05-08");

	Instant instant = localDate.atTime(LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant();
	Date date = Date.from(instant);
	System.out.println(date);

	instant = localDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
	date = Date.from(instant);
	System.out.println(date);

	instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
	date = Date.from(instant);
	System.out.println(date);

	instant = LocalDateTime.of(localDate, LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()).toInstant();
	date = Date.from(instant);
	System.out.println(date);

	instant = Timestamp.valueOf(localDate.atTime(LocalTime.MIDNIGHT)).toInstant();
	date = Date.from(instant);
	System.out.println(date);

	instant = Timestamp.valueOf(LocalDateTime.of(localDate, LocalTime.MIDNIGHT)).toInstant();
	date = Date.from(instant);
	System.out.println(date);

	Timestamp timestamp = Timestamp.valueOf(localDate.atTime(LocalTime.MIDNIGHT));
	date = new Date(timestamp.getTime());
	System.out.println(date);

  }
} 

输出

Wed May 08 00:00:00 IST 2019
Wed May 08 00:00:00 IST 2019
Wed May 08 00:00:00 IST 2019
Wed May 08 00:00:00 IST 2019
Wed May 08 00:00:00 IST 2019
Wed May 08 00:00:00 IST 2019
Wed May 08 00:00:00 IST 2019 

参考文献