最近在项目升级框架查资料会涉及到LocalDateTime,当时看到这个觉得为什么大家都在用这个,为什么?
说到这里我们要知道这个LocalDateTime来自哪里,实际上这个LocalDateTime是JDK8的新特性之一,JDK8发布了新的date-time API,加强对时间日期的管理。(实际上JDK8的新特性可以总结一下出个系列,虽然现在11都出来好久,但是很多人还没享受JDK8带来的便利,像lambda,方法引用,新的stream API,默认方法,optional类等,但是新的框架都已经开始更新在JDK8的基础上)。
那之前我们经常用的Date,和我们经常用来转换日期时间格式的SimpleDateFromat这两个工具有什么的不好的吗?
首先一点这两者是线程不安全的,之前我们一直强调集合的线程安全,因为线程不安全会导致集合里面元素的信息顺序不正确,但是没有注意date这个常用的工具类的线程安全。而且Date作为一个最早的版本就包含的工具类,在就有的基础上改来改去,很多方法不再推荐
那谁来替代Date呢,JDK8带来了新的时间日期API也就是 java.time 包下面带来Local和Zone,他俩的区别一个是基于你本地时间的,一个是你自己指定时区的。
顺便说一句Local(本地)都有这几个类:LocalDateTime(既包含时间也包含日期),LocalDate(只关注日期,一般来说你只关注日期不需要时间的话用这个),LocalTime(只关注时间,不关注日期)
当然了,实际上LocalDate和LocalTime也支持日期+时间的形式,那他是怎么做到的呢,因为LocalDate里面包含一个atTime来存储时间,同理LocalTime也有一个atDate属性
例如:
LocalDate localDate = LocalDate.of(2021,3,15);
localDate.atTime(LocalTime.now());
但是如果不想多设置的话可以直接使用LocalDateTime,将日期时间一起处理了。
LocalDateTime localDateTime = LocalDateTime.now();
所以说LocalDateTime取代Date是一个趋势,当然有人比较过二者的效率,结果是Date要比LocalDateTIme快一些,这也没办法毕竟线程安全可能就要多点取舍,未来的版本也许LocalDateTime也可以像Current集合那样线程又安全又快。