本文将提供从 Java java.time.LocalDateTime
转换为 java.util.Date
以及从 java.util.Date
转换为 java.time.LocalDateTime
的示例。 Java 8 中引入的 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
我们可以通过以下方式将 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
,然后使用将返回 ZonedDateTime
的 Instant.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
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.concretepage.com/java/java-8/convert-between-java-localdatetime-date
内容来源于网络,如有侵权,请联系作者删除!