Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息,请参阅JDK发布说明。
日期时间API是使用几个设计原则开发的。
API中的方法定义明确,行为清晰可预测。例如,使用null参数值调用日期时间方法通常会触发NullPointerException。
日期时间API提供流畅的接口,使代码易于阅读。由于大多数方法不允许使用null值参数,并且不返回null值,因此方法调用可以链接在一起,生成的代码可以快速理解。例如:
LocalDate today = LocalDate.now(); LocalDate payday = today.with(TemporalAdjusters.lastDayOfMonth()).minusDays(2);
日期时间API中的大多数类创建的对象是不可变的,意味着在对象创建后,它们不能被修改。要更改不可变对象的值,必须构建一个修改后的副本作为原始对象的副本。这也意味着日期时间API在定义上是线程安全的。这影响API的方式是,用于创建日期或时间对象的大多数方法以of
、from
或with
为前缀,而不是构造函数,并且没有set
方法。例如:
LocalDate dateOfBirth = LocalDate.of(2012, Month.MAY, 14); LocalDate firstBirthday = dateOfBirth.plusYears(1);
日期时间API在尽可能的情况下是可扩展的。例如,您可以定义自己的时间调整器和查询,或构建自己的日历系统。