点击上方“JavaEdge”,关注公众号
设为“ 星标”,好文章不错过!1 背景
Java8前,处理日期时间时,使用的“三大件”
Date
Calender
SimpleDateFormat
以声明时间戳、使用日历处理日期和格式化解析日期时间。但这些类的API可读性差、使用繁琐,且非线程安全,如同设计的翔一样的IO,也是Java让人诟病的一大原因。
于是Java8推出全新日期时间类。这些类的API功能强大简便、线程安全。
但毕竟Java8刚出这些类,诸如序列化、数据访问等类库都不支持Java8日期时间类,需在新老类中来回切换。比如,在业务逻辑层使用LocalDateTime,存入数据库或者返回前端的时候还要切换回Date。因此,还不如沿用老的日期时间类。
不过我们生活在最好的时代,基本主流类库都支持新日期时间类型,但还有项目因还是用祖传日期时间类,出现很多古今交错的错误实践。
比如
通过随意修改时区,使读取到的数据匹配当前时钟
直接对读取到的数据做加、减几个小时的操作,来“修正数据”
本文旨在分析古今时间错乱的本质原因,看看使用遗留日期时间类,来处理日期时间初始化、格式化、解析、计算等可能会遇到的问题,以及如何使用新日期时间类解决。
2 初始化日期时间
初始化2020年11月11日11点11分11秒时间,这样可行吗?
日志输出时间是3029年12月11日11点11分11秒:
date : Sat