Java LocalDateTime 和 Date 互相转换
本页将提供从
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 + Time-Zone = 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
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
,然后使用Instant.atZone()
附加区域ID
,这将返回ZonedDateTime
。然后使用ZonedDateTime.toLocalDateTime()
来获得LocalDateTime
实例。
localDateTime =
Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println(localDateTime);
示例
DateToLocalDateTime.java
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
参考文献
【1】Class LocalDateTime
【2】Class Date
【3】Convert between Java LocalDateTime and Date