java.util.Date类缺陷
在Java8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,主要有:
- Java的java.util.Date和java.util.Calendar类易用性差,不支持时区,而且他们都不是线程安全的;
- 用于格式化日期的类DateFormat被放在java.text包中,它是一个抽象类,所以我们需要实例化一个SimpleDateFormat对象来处理日期格式化,并且DateFormat也是非线程安全,这意味着如果你在多线程程序中调用同一个DateFormat对象,会得到意想不到的结果。
- 对日期的计算方式繁琐,而且容易出错,因为月份是从0开始的,从Calendar中获取的月份需要加一才能表示当前月份。
JAVA8日期及时间API
- LocalDate:该类的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息,也不附带任何与时区相关的信息
- LocalDate
- LocalTime
- LocalDateTime
- ZonedDateTime:时区时间
- Instant
- Duration:主要用于以秒和纳秒衡量时间的长短
- Period
- Temporal接口定义了如何读取和操纵为时间建模的对象的值
- TemporalField
- DateTimeFormatter:时间格式化工具类