这些Java教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发行说明,了解所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
日期时间 API 提供了四个专门处理日期信息的类,不考虑时间或时区。这些类的使用建议通过类名来判断:LocalDate、YearMonth、MonthDay 和 Year。
LocalDate 表示 ISO 日历中的年月日,用于表示不带时间的日期。你可以使用 LocalDate 来追踪重要事件,如出生日期或结婚日期。以下示例使用 of 和 with 方法创建 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.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类表示特定月份的某一天,例如1月1日的元旦。
以下示例使用MonthDay.isValidYear方法确定2010年是否可以使用2月29日。调用返回false,确认2010年不是闰年。
MonthDay date = MonthDay.of(Month.FEBRUARY, 29); boolean validLeapYear = date.isValidYear(2010);
Year类表示一年。以下示例使用Year.isLeap方法确定给定年份是否为闰年。调用返回true,确认2012年是闰年。
boolean validLeapYear = Year.of(2012).isLeap();