Java8 中 Date 和 LocalDateTime 互相转换
前面在 Java8 新增 DateTimeFormatter 与 SimpleDateFormat 对比 文中讲了 java8 新的时间格式化 API 使用, DateTimeFormatter
使用了新的时间类 LocalDateTime
。为了和现有的代码兼容,很多人在新建时间实例的时候还是使用的 Date
,就会造成很多不便,那么怎么合理的互相转换呢?本文简单的展示如何 互相转换 Date
和 LocalDateTime
类。
Date 转换 LocalDateTime
至少有两种方式可以实现 Date
转换为 LocalDateTime
。
方法一
将 Date 转换为 LocalDatetime,可以使用以下方法:
- 从日期获取 ZonedDateTime 并使用其方法 toLocalDateTime() 获取 LocalDateTime
- 使用 LocalDateTime 的 Instant() 工厂方法
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
System.out.println("Date = " + date);
System.out.println("LocalDateTime = " + localDateTime);
}
}
结果:
方法二
可以使用 LocalDateTime 的 FactoryInput()
方法使用系统的默认时区。
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), zoneId);
LocalDateTime 转换 Date
要将 LocalDateTime 转换为 java.util.Date,可以使用以下步骤:
- 使用 atZone() 方法将 LocalDateTime 转换为 ZonedDateTime
- 将 ZonedDateTime 转换为 Instant,并从中获取 Date
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
public class Test {
public static void main(String[] args) {
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zdt = localDateTime.atZone(zoneId);
Date date = Date.from(zdt.toInstant());
System.out.println("LocalDateTime = " + localDateTime);
System.out.println("Date = " + date);
}
}
结果为: