目录

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

/weixin_miniapp.png

【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 的一个实例。我们可以使用 ZonedDateTime 或 Timestamp 来获得 Instant 。 ZonedDateTime 和 Timestamp 可以使用 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 

参考文献

/weixin_miniapp.png