Java中LocalDateTime与Date之间的转换

x33g5p2x  于2022-09-24 转载在 Java  
字(3.5k)|赞(0)|评价(0)|浏览(1196)

本文将提供从 Java java.time.LocalDateTime 转换为 java.util.Date 以及从 java.util.Date 转换为 java.time.LocalDateTime 的示例。 Java 8 中引入的 LocalDateTime 是没有时区的日期时间。 Date 表示特定的时间瞬间,精度为毫秒。

1. LocalDateTime转换为Date

LocalDateTime 不包含时区,Date 表示特定的时间瞬间,精度为毫秒。要从 LocalDateTime 转换为 Date,我们需要提供时区。

LocalDateTime + 时区 = Date

我们可以通过以下方法将 LocalDateTime 转换为 Date
1。使用 LocalDateTime.atZone():它将这个日期时间与给定的时区结合起来创建一个 ZonedDateTime。那么这个ZonedDateTime就可以转换成Instant了。方法 Date.from() 接受 Instant 并返回等效的 Date 实例。

LocalDateTime localDateTime = LocalDateTime.parse("2019-11-15T13:15:30");
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
Date date = Date.from(instant);
System.out.println(date);

2。使用 LocalDateTime.toInstant():它将这个本地日期时间和指定的偏移量结合起来形成一个 Instant

instant = localDateTime.toInstant(ZoneOffset.UTC);
date = Date.from(instant);
System.out.println(date);

3。使用 Timestamp.valueOf():它将 JDBC 时间戳转义格式的字符串对象转换为 Timestamp 值。给定的字符串日期应为 yyyy-MM-dd HH:mm:ss 格式。

instant = Timestamp.valueOf(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).toInstant();
date = Date.from(instant);
System.out.println(date);

要创建 Date 实例,我们还使用 Date 构造函数,以毫秒为单位传递时间。

Timestamp timestamp = Timestamp.valueOf(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
date = new Date(timestamp.getTime());
System.out.println(date);

如下示例:
LocalDateTimeToDate.java

package com.concretepage;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class LocalDateTimeToDate {
  public static void main(String[] args) {
	LocalDateTime localDateTime = LocalDateTime.parse("2019-11-15T13:15:30");

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

	instant = localDateTime.toInstant(ZoneOffset.UTC);
	date = Date.from(instant);
	System.out.println(date);

	instant = Timestamp.valueOf(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).toInstant();
	date = Date.from(instant);
	System.out.println(date);

	Timestamp timestamp = Timestamp.valueOf(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
	date = new Date(timestamp.getTime());
	System.out.println(date);
  }
}

输出

Fri Nov 15 13:15:30 IST 2019
Fri Nov 15 18:45:30 IST 2019
Fri Nov 15 13:15:30 IST 2019
Fri Nov 15 13:15:30 IST 2019

2. Date转换为LocalDateTime

我们可以通过以下方式将 Date 转换为 LocalDateTime
1. 首先使用 Instant.ofEpochMilli() 方法将 Date 转换为 Instant。然后使用 LocalDateTime.ofInstant() 方法将 Instant 转换为具有给定区域 id 的 LocalDateTime

Date date = new Date();
LocalDateTime localDateTime = 
  LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
System.out.println(localDateTime);

2. 首先将 Date 转换为 Instant,然后使用将返回 ZonedDateTimeInstant.atZone() 附加区域 id。然后使用 ZonedDateTime.toLocalDateTime() 获取 LocalDateTime 实例。

localDateTime = 
  Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println(localDateTime);

如下示例:

DateToLocalDateTime.java

package com.concretepage;
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();
	  LocalDateTime localDateTime = 
		  LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
	  System.out.println(localDateTime);
	  
	  localDateTime = 
		  Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
	  System.out.println(localDateTime);
  }
}

输出

2019-08-28T20:31:13.473
2019-08-28T20:31:13.473

相关文章

微信公众号

最新文章

更多