Java8 中 Date 和 LocalDateTime 互相转换

前面在 Java8 新增 DateTimeFormatter 与 SimpleDateFormat 对比 文中讲了 java8 新的时间格式化 API 使用, DateTimeFormatter 使用了新的时间类 LocalDateTime。为了和现有的代码兼容,很多人在新建时间实例的时候还是使用的 Date,就会造成很多不便,那么怎么合理的互相转换呢?本文简单的展示如何 互相转换 DateLocalDateTime 类。

Date 转换 LocalDateTime

至少有两种方式可以实现 Date 转换为 LocalDateTime

方法一

将 Date 转换为 LocalDatetime,可以使用以下方法:

  1. 从日期获取 ZonedDateTime 并使用其方法 toLocalDateTime() 获取 LocalDateTime
  2. 使用 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,可以使用以下步骤:

  1. 使用 atZone() 方法将 LocalDateTime 转换为 ZonedDateTime
  2. 将 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);
    }
}

结果为:

如果觉得这对你有用,请随意赞赏,给与作者支持
评论 0
最新评论