这些Java教程是针对JDK 8编写的。本页面描述的示例和实践不利用后续版本引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言特性的摘要,请参阅Java语言变化。
有关所有JDK版本的新功能、增强功能以及删除或废弃选项的信息,请参阅JDK发布说明。
LocalTime类与其他以Local为前缀的类类似,但仅处理时间。这个类非常适用于表示基于人类的一天中的时间,例如电影时间,或当地图书馆的开放和关闭时间。它还可以用来创建一个数字时钟,如下面的示例所示:
LocalTime thisSec; for (;;) { thisSec = LocalTime.now(); // display代码的实现留给读者 display(thisSec.getHour(), thisSec.getMinute(), thisSec.getSecond()); }
LocalTime类不存储时区或夏令时信息。
处理日期和时间(不含时区)的类是LocalDateTime,它是日期时间API的核心类之一。此类用于表示日期(月-日-年)与时间(小时-分钟-秒-纳秒)的组合,实际上是LocalDate与LocalTime的组合。该类可用于表示特定事件,例如2013年8月17日下午1:10开始的美洲杯挑战者系列赛的第一场比赛。注意,这表示当地时间下午1:10。要包含时区,必须使用ZonedDateTime或OffsetDateTime,如时区和偏移类中所讨论的。
除了每个基于时间的类都提供的now方法外,LocalDateTime类还有各种of方法(或以of为前缀的方法),用于创建LocalDateTime实例。还有一个from方法,将另一个时间格式的实例转换为LocalDateTime实例。还有用于添加或减去小时、分钟、天、周和月份的方法。以下示例显示了其中的几个方法。日期时间表达式以粗体显示:
System.out.printf("当前时间: %s%n", LocalDateTime.now()); System.out.printf("1994年4月15日上午11:30: %s%n", LocalDateTime.of(1994, Month.APRIL, 15, 11, 30)); System.out.printf("当前时间(来自Instant): %s%n", LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault())); System.out.printf("6个月后的时间: %s%n", LocalDateTime.now().plusMonths(6)); System.out.printf("6个月前的时间: %s%n", LocalDateTime.now().minusMonths(6));
此代码将产生类似以下的输出:
当前时间: 2013-07-24T17:13:59.985 1994年4月15日上午11:30: 1994-04-15T11:30 当前时间(来自Instant): 2013-07-24T17:14:00.479 6个月后的时间: 2014-01-24T17:14:00.480 6个月前的时间: 2013-01-24T17:14:00.481