文档

Java™教程
隐藏目录
日期类
路径: 日期 时间
课程: 标准日历

日期类

日期时间 API 提供了四个专门处理日期信息的类,不考虑时间或时区。这些类的使用建议通过类名来判断:LocalDateYearMonthMonthDayYear

LocalDate

LocalDate 表示 ISO 日历中的年月日,用于表示不带时间的日期。你可以使用 LocalDate 来追踪重要事件,如出生日期或结婚日期。以下示例使用 ofwith 方法创建 LocalDate 实例:

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

有关 TemporalAdjuster 接口的更多信息,请参阅 Temporal Adjuster

除了通常的方法外,LocalDate 类还提供了一些用于获取给定日期信息的 getter 方法。例如,以下代码返回 "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("对于日期 %s,下一个星期三是 %s.%n",
                  date, nextWed);

运行该代码将输出:

对于日期 2000-11-20,下一个星期三是 2000-11-22.

Period 和 Duration 部分还使用了 LocalDate 类的示例。

YearMonth

YearMonth 类表示特定年份的月份。以下示例使用 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

MonthDay类表示特定月份的某一天,例如1月1日的元旦。

以下示例使用MonthDay.isValidYear方法确定2010年是否可以使用2月29日。调用返回false,确认2010年不是闰年。

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

Year

Year类表示一年。以下示例使用Year.isLeap方法确定给定年份是否为闰年。调用返回true,确认2012年是闰年。

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

上一页:星期几和月份枚举
下一页:日期和时间类