# 日期时间设计原则

> 原文： [https://docs.oracle.com/javase/tutorial/datetime/overview/design.html](https://docs.oracle.com/javase/tutorial/datetime/overview/design.html)

Date-Time API 是使用几个设计原则开发的。

## 明确

API 中的方法定义明确，其行为清晰且预期。例如，使用 `null` 参数值调用 Date-Time 方法通常会触发 `NullPointerException` 。

## 流利

Date-Time API 提供了流畅的界面，使代码易于阅读。因为大多数方法不允许具有 `null` 值的参数并且不返回 `null` 值，所以可以将方法调用链接在一起并且可以快速理解所得到的代码。例如：

```
LocalDate today = LocalDate.now();
LocalDate payday = today.with(TemporalAdjusters.lastDayOfMonth()).minusDays(2);

```

## 不可变

Date-Time API 中的大多数类都创建[不可变](../../essential/concurrency/immutable.html)的对象，这意味着在创建对象后，它无法修改。要更改不可变对象的值，必须将新对象构造为原始对象的修改副本。这也意味着根据定义，Date-Time API 是线程安全的。这会影响 API，因为用于创建日期或时间对象的大多数方法都以`of`，`from`或`with`为前缀，而不是构造函数，并且没有`set`方法。例如：

```
LocalDate dateOfBirth = LocalDate.of(2012, Month.MAY, 14);
LocalDate firstBirthday = dateOfBirth.plusYears(1);

```

## 扩展

Date-Time API 尽可能是可扩展的。例如，您可以定义自己的时间调整器和查询，或构建自己的日历系统。