# 日期类

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

Date-Time API 提供了四个专门处理日期信息的类，而不考虑时间或时区。类名建议使用这些类： `LocalDate` ， `YearMonth` ， `MonthDay` 和 `Year` 。

## LOCALDATE 的

[`LocalDate` ](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html)表示 ISO 日历中的年 - 月 - 日，对于表示没有时间的日期很有用。您可以使用 `LocalDate` 来跟踪重要事件，例如出生日期或结婚日期。以下示例使用的`和方法创建 `LocalDate` 的实例：`

```
LocalDate date = LocalDate.of(2000, Month.NOVEMBER, 20);
LocalDate nextWed = date.with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));

```

有关 `TemporalAdjuster` 界面的更多信息，请参阅[时间调整器](adjusters.html)。

除了通常的方法之外， `LocalDate` 类提供了获取有关给定日期的信息的 getter 方法。 [`getDayOfWeek` ](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#getDayOfWeek--)方法返回特定日期所在的星期几。例如，以下代码行返回“MONDAY”：

```
DayOfWeek dotw = LocalDate.of(2012, Month.JULY, 9).getDayOfWeek();

```

以下示例使用 `TemporalAdjuster` 检索特定日期之后的第一个星期三。

```
LocalDate date = LocalDate.of(2000, Month.NOVEMBER, 20);
TemporalAdjuster adj = TemporalAdjusters.next(DayOfWeek.WEDNESDAY);
LocalDate nextWed = date.with(adj);
System.out.printf("For the date of %s, the next Wednesday is %s.%n",
                  date, nextWed);

```

运行代码会产生以下结果：

```
For the date of 2000-11-20, the next Wednesday is 2000-11-22.

```

[周期和持续时间](period.html)部分也有使用 `LocalDate` 类的示例。

## YearMonth

[`YearMonth` ](https://docs.oracle.com/javase/8/docs/api/java/time/YearMonth.html)类表示特定年份的月份。以下示例使用 `YearMonth.lengthOfMonth（）`方法确定几年和月份组合的天数。

```
YearMonth date = YearMonth.now();
System.out.printf("%s: %d%n", date, date.lengthOfMonth());

YearMonth date2 = YearMonth.of(2010, Month.FEBRUARY);
System.out.printf("%s: %d%n", date2, date2.lengthOfMonth());

YearMonth date3 = YearMonth.of(2012, Month.FEBRUARY);
System.out.printf("%s: %d%n", date3, date3.lengthOfMonth());

```

此代码的输出如下所示：

```
2013-06: 30
2010-02: 28
2012-02: 29

```

## 月日

[`MonthDay` ](https://docs.oracle.com/javase/8/docs/api/java/time/MonthDay.html)类代表特定月份的日期，例如 1 月 1 日的新年。

以下示例使用 [`MonthDay.isValidYear`](https://docs.oracle.com/javase/8/docs/api/java/time/MonthDay.html#isValidYear-int-)方法确定 2 月 29 日是否对 2010 年有效。该调用返回 `false` ，确认 2010 年不是闰年。

```
MonthDay date = MonthDay.of(Month.FEBRUARY, 29);
boolean validLeapYear = date.isValidYear(2010);

```

## 年

[`年`](https://docs.oracle.com/javase/8/docs/api/java/time/Year.html) 类代表一年。以下示例使用 [`Year.isLeap`](https://docs.oracle.com/javase/8/docs/api/java/time/Year.html#isLeap--)方法确定给定年份是否为闰年。该调用返回 `true` ，确认 2012 年是闰年。

```
boolean validLeapYear = Year.of(2012).isLeap();

```