在上一篇文章《Java开发篇 - 还在为计算2个日期间隔的天数纠结?是时候换掉java.util.Date》中,介绍了JDK的日期时间函数(java.util.Date, java.util.Calendar),在java的技术发展中充当了重要作用,随然日期时间的处理上存在不好用,容易混乱不好用,但也陪伴了java的起步及成长。
在随后的发展中,也出现了救民于水火的 joda-time,第一次使用时,确实眼前一亮,简单好用,也在很多项目中使用了,但注意到joda-time的官网已更新了信息,说不在积极维护了。
Note that Joda-Time is considered to be a largely “finished” project. No major enhancements are planned. If using Java SE 8, please migrate to java.time (JSR-310).
Joda-time is no longer in active development except to keep timezone data up to date. From Java SE 8 onwards, users are asked to migrate to java.time (JSR-310) - a core part of the JDK which replaces this project. For Android users, java.time is added in API 26+. Projects needing to support lower API levels can use the ThreeTenABP library.
上面的原文就是 Joda 已经不再积极进行开发了,只是进行一些时区数据的维护了。如果正在使用JDK8,建议迁到java.time去,也就是java.time基本上实现了joda-time的功能。感觉有点遗憾的,可能很多人都已经习惯 DateTime 来 new 一下然后进行一堆计算。
上篇文章已经对JDK8中的时间/日期做了介绍,确实提供了更加丰富及简单的函数。当然,对于新旧版本日期函数的转换来说,确实麻烦一点,但也不能否定新版的优点。
比如从Date转换成LocalDateTime,如果能一个LocalDateTime.from() 可能更好。
LocalDateTime localDateTime = new Date().toInstant().atZone(
ZoneId.systemDefault()).toLocalDateTime();
从LocalDateTime 转换成Date
Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant())
回归正题,经过我的实践及测试,项目都基本上将Date/Calendar转换到了java.time的相关函数下,而且这些新的工具类都提供了线程安全,不像SimpleDateFormat是线程不安全,还被坑过。
为了造福其他的开发小伙伴,我将java.time相关的类及函数说明,例子整理到了一个PDF文档,方便更多的小伙伴下载下来就能查阅,权当一个小工具文档,整理完大概有50多页的样子。需要的可以关注我的微信公众号【技术老男孩】,在聊天区回复【javatime】即可获取,另外回复还可以获取到一本【Java核心知识点】的PDF文档,里面的内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈,希望大家都能找到适合自己的公司,开开心心的撸代码。
在部分内容如下图所示:
1) java.time的文档:
2) Java核心知识点的文档
限于篇幅的原因,具体的内容可以查看PDF。核心知识点的内容还不错,以前换工作、面试时,都会从头看一篇,能收获不少,可以以点带面,来进行复习,如果那块不熟悉,可以在找到对应块的资料,好好研究及学习。