Java8新特性 - Date Time API
原创2020/8/6...大约 1 分钟
Java8发布了全新的日期时间相关API,增强了对日期和时间的处理。
先来看看Java8之前的API存在哪些问题。
旧版日期时间API的问题
- 非线程安全。java.util.Date是非线程安全的,且日期类是可变的
- 有两个日期类。在java.util和java.sql的包中都有日期类,且java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期,还有一个java.sql.Time仅包含时间,后两者都是前者的子类,这样的设计很不合理
- 日期与字符串的转换问题。日期类自身不能直接转换成字符串,需要借助java.text包,且java.text.SimpleDateFormat还是非线程安全的
- 日期的计算和处理。几乎不具备时间计算与处理能力,需要借助java.util.Calendar
Java8的日期时间API
在Java8中,所有时间日期相关的API都封装在java.time包内
常用的类有:
| 类 | 含义 |
|---|---|
| LocalDate | 不带时区的日期 |
| LocalTime | 不带时区的时间 |
| LocalDateTime | 不带时区的日期+时间 |
| ZonedDateTime | 带时区的日期+时间 |
| Month | 月份的枚举值 |
| DayOfWeek | 星期的枚举值 |
| Instant | 时刻 |
| Duration | 一段时间,例如34.5s |
| Clock | 带时区的时钟 |