Java 时间日期
在 Java 8 之前,处理日期和时间主要依赖 java.util.Date 和 java.util.Calendar 类,它们存在设计缺陷、线程不安全、API 混乱等问题。从 Java 8 开始,引入了全新的 java.time 包,它提供了不可变、线程安全且设计清晰的 API,是现代 Java 开发中处理时间日期的标准方式。
java.time 包的核心类
LocalDate: 表示一个不带时区的日期(年-月-日)。例如:2024-07-25。LocalTime: 表示一个不带时区的时间(时:分:秒.纳秒)。例如:15:30:00。LocalDateTime: 表示日期和时间的组合,不带时区。例如:2024-07-25T15:30:00。ZonedDateTime: 表示一个带时区的日期和时间。这是处理需要考虑时区转换的场景时的首选。Instant: 表示时间线上的一个瞬时点(时间戳),通常用于机器之间的时间记录,内部以 UTC 时区为基准。DateTimeFormatter: 用于格式化和解析日期时间对象。
创建日期和时间对象
获取当前日期和时间非常简单。
您也可以使用 of() 方法创建指定的日期和时间。
操作日期和时间
java.time API 的所有对象都是不可变的,任何修改操作都会返回一个新的实例。
获取日期时间信息
可以轻松地从日期时间对象中提取所需的部分。
格式化和解析
DateTimeFormatter 是格式化和解析日期时间的核心工具。
Java 也提供了一些预定义的格式化器,如 DateTimeFormatter.ISO_LOCAL_DATE_TIME。
计算时间差
Period: 用于计算两个日期 (LocalDate) 之间的差值,单位是年、月、日。Duration: 用于计算两个时间点 (LocalTime,LocalDateTime,Instant) 之间的差值,单位是天、时、分、秒、纳秒。