一. 为什么要使用JDK8的新版日期API
1. 日期差值问题
1). 使用老版本的Date来计算两个日期之间相差的天数:
将两个日期转换成毫秒数(Date的getTime()方法返回的是对应日期距离1970.01.01的毫秒值),相减之后,将差值再转换成“天”的单位。
2). 使用新版本的日期API来计算两个日期之间相差的天数:
ChronoUnit.DAYS.between方法。
发现使用老版本的API存在计算误差。
2.线程安全问题
SimpleDateFormater是线程不安全的,因为它有一个成员变量Calendar calendar.
二. Date-Time API中的基本类使用
1. 常用类
(1)Instant:
Instant类对事件轴上的单一瞬时点建模,可以用于记录应用程序中的事件时间戳,在日期类型转换中,可以使用该类作为中间类来完成类型转换。
(2)Duration:
Duration类表示秒或者纳秒时间间隔,适合处理时间间隔短,但需要较高精确度的时间间隔计算。
(3)Period:
Period类表示一段时间的年、月、日。
(4)LocalDate:
LocalDate类是一个不可变的日期时间对象,表示日期,通常被视为年月日。
(5)LocalTime:
LocalTime是一个不可变的日期时间对象,表示时间,通常被看作是时分秒,精确到纳秒。
(6)LocalDateTime:
LocalDateTime是一个不可变的日期时间对象,表示日期时间,通常视为年月日时分秒。
(7)ZonedDateTime:
ZonedDateTime是一个不可变的、具有时区的日期时间对象,此类存储所有日期和时间字段,精确到纳秒,时区为区域偏移量,用于处理模糊的本地日期时间。