Date、LocalDateTime类型转换的两种方式

8 阅读2分钟

说明:Date、LocalDateTime都是Java中表示日期的两种类型,LocalDateTime是JDK8之后才有的,弥补了Date的缺陷和不足。

本文介绍Date、LocalDateTime类型互相转换的两种方式

Date转LocalDateTime

    public static void main(String[] args) {
        // Date 类型转为 LocalDateTime
        Date date = new Date();
        System.out.println("date = " + date);

        // 方式一:
        LocalDateTime localDateTime1 = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        System.out.println("localDateTime1 = " + localDateTime1);

        // 方式二:使用hutool
        LocalDateTime localDateTime2 = DateUtil.toLocalDateTime(date);
        System.out.println("localDateTime2 = " + localDateTime2);
    }

方式二需要在项目中引入hutool依赖,Maven坐标,如下

	<dependency>
	    <groupId>cn.hutool</groupId>
	    <artifactId>hutool-all</artifactId>
	    <version>5.8.6</version>
	</dependency>

瞄一眼源码,看下实现方式。

方式一是先获取一个 Instant 对象

在这里插入图片描述

接着获取 ZonedDateTime 实例

在这里插入图片描述

最后调用自身API,返回 LocalDateTime 类型

在这里插入图片描述


看下方式二

在这里插入图片描述

继续,也是先获取了 Instant 对象

在这里插入图片描述

go on,继续

在这里插入图片描述

Instant 对象,连同时区一起传入

在这里插入图片描述

进入到Java源码了

在这里插入图片描述

结合上面的时间、时区信息,创建了一个 LocalDateTime 对象

在这里插入图片描述

LocalDateTime转Date

也是两种方式

    public static void main(String[] args) {
        // localDateTime 类型转为 Date
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("localDateTime = " + localDateTime);

        // 方式一
        Date date1 = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
        System.out.println("date1 = " + date1);

        // 方式二:使用hutool
        Date date2 = DateUtil.date(localDateTime);
        System.out.println("date2 = " + date2);
    }

在这里插入图片描述

运行可以看见,方式二生成的时间打印结果和方式一不一样,显然,hutool里面重写了toString()方法,瞄下源码。

在这里插入图片描述

通过上面这个方法,能知道两个信息:

  • LocalDateTime 和 TemporalAccessor 有继承关系,不然不可能传入;

  • DateTime 和 Date 也有继承关系,不然不可能返回;

我们只看返回,进入DateTime类,可见是hutool源码,继承了Java的Date对象;

在这里插入图片描述

直接找toString()方法。useJdkToStringStyle,是个私有属性,在类的开头,上面看继承关系的那张图里可见,初始值是false。继续看方法最后一行返回,调用了成员方法,传入了一个时区。

在这里插入图片描述

找到了,这里对返回的时间字符串做了格式化

在这里插入图片描述

总结

本文介绍了Date、LocalDateTime类型转换的两种方式

首次发布

hezhongying.blog.csdn.net/article/det…