jdk8-日期时间的变更
1.旧版日期时间的问题
在旧版本中JDK对于日期和时间这块的时间是非常差的。
/**
* 旧版日期时间设计的问题
*/
-
设计不合理,在java.util和java.sql的包中都有日期类,java.util.Date同时包含日期和时间的,而java.sql.Date仅仅包含日期,此外用于格式化和解析的类在java.text包下。
-
非线程安全,java.util.Date是非线程安全的,所有的日期类都是可变的,这是java日期类最大的问题之一。
-
时区处理麻烦,日期类并不提供国际化,没有时区支持。
2. 新日期时间API介绍
JDK 8中增加了一套全新的日期时间API,这套API设计合理,是线程安全的。新的日期及时间API位于 java.time 包 中,下面是一些关键类。
-
LocalDate :表示日期,包含年月日,格式为 2019-10-16
-
LocalTime :表示时间,包含时分秒,格式为 16:38:54.158549300
-
LocalDateTime :表示日期时间,包含年月日,时分秒,格式为 2018-09-06T15:33:56.750
-
DateTimeFormatter :日期时间格式化类。
-
Instant:时间戳,表示一个特定的时间瞬间。
-
Duration:用于计算2个时间(LocalTime,时分秒)的距离
-
Period:用于计算2个日期(LocalDate,年月日)的距离
-
ZonedDateTime :包含时区的时间
Java中使用的历法是ISO 8601日历系统,它是世界民用历法,也就是我们所说的公历。平年有365天,闰年是366 天。此外Java 8还提供了4套其他历法,分别是:
-
ThaiBuddhistDate:泰国佛教历
-
MinguoDate:中华民国历
-
JapaneseDate:日本历
-
HijrahDate:伊斯兰历
2.1 日期时间的常见操作
LocalDate,LocalTime以及LocalDateTime的操作。
/**
* JDK8 日期时间操作
*/