<div> JavaScript is disabled on your browser.
Skip navigation links
Java™ Platform
Standard Ed. 8
compact1

Package java.time

日期、时间、时刻主要的API,和持续时间。

See: 描述

Package java.time Description

日期、时间、时刻主要的API,和持续时间。

类定义在这里代表委托日期时间的概念,包括时间、持续时间、日期、时间、时区和时间。他们是基于ISO的日历系统,这是事实上世界历继预期公历规则。所有的类都是不可变的和线程安全的。

每一个日期时间实例都是由一个方便的由原料药提供的字段组成的。低级别的访问的字段引用的java.time.temporal包。每个类包括支持打印和解析所有日期和时间的方式。指的是java.time.format包定制选项。

包中包含的java.time.chrono日历API ChronoLocalDate中性,ChronoLocalDateTimeChronoZonedDateTimeEra。这是为需要使用本地化日历的应用程序使用的。建议应用程序使用ISO-8601日期和时间类从这个包跨系统边界,如数据库或整个网络。日历中性的接口应该保留与用户的交互。

日期和时间

Instant本质上是一种数字时间戳。当前可以从Clock检索。这记录在某个时间点的坚持是有用的,过去一直是从System.currentTimeMillis()相关存储结果。

LocalDate店日期没有时间。本店的日期像2010-12-03”可以用来存储一个生日。

LocalTime存储时间没有约会。本店一时间“11:30”,可以用来存储一个打开和关闭的时间。

LocalDateTime存储日期和时间。本店日期时间像2010-12-03t11:30”。

ZonedDateTime存储日期和时间与时区。如果你想执行的日期和时间,考虑到ZoneId的精确计算,这是非常有用的,如“欧洲/巴黎。在可能的情况下,建议使用一个没有时区的简单类。时区的广泛使用会给应用程序增加相当大的复杂性。

时间和周期

除了日期和时间之外,该接口还允许时间和持续时间的存储。一个Duration是一个简单的测量时间沿着时间线来。一个Period表达意义的人类在单位时间量,如年或小时。

附加值类型

Month店一个月的。这家商店在一个单一的一个月的隔离,如“十二月”。

DayOfWeek店一星期自己。这家商店每周一天的隔离,如“星期二”。

Year店一年自己。这家商店一年中隔离,如“2010”。

YearMonth店一年没有一天或一个月。本店一年和月,如“2010-12”可用于信用卡到期。

MonthDay店一个月,一天没有一年或一年的时间。本店一个月,每月的最后一天,如“12-03”可以用来储存像生日一年一度的年不存储。

OffsetTime存储时间与UTC偏移量没有日期。本店的日期像11:30 + 01:00”。的ZoneOffset的形式是“+”01:00。

OffsetDateTime存储日期和时间与UTC的偏移量。本店日期时间像2010-12-03t11:30 + 01:00”。这是有时在XML消息和其他形式的持久性,但包含较少的信息比一个完整的时区。

包装规格

除非另有说明,通过空参数的构造函数或方法的任何类或接口在这个包会导致NullPointerException被。Javadoc“@参数”的定义是用于概括无效行为。“@投NullPointerException”是没有明确的记录在每一个方法。

所有的计算应检查数值溢出和扔一个ArithmeticExceptionDateTimeException

设计说明(非规范性)

该应用程序的接口被设计为拒绝早期和清除这种行为。一个关键的例外是任何一个方法,需要一个对象,并返回一个布尔值,用于检查或验证的目的,一般会返回假为空。

该接口的设计是类型安全的,合理的主要高层次的。因此,有单独的类的不同的概念,日期,时间和日期时间,加上偏移和时区的变种。这似乎是一个很大的类,但大多数应用程序可以开始只有五个日期/时间类型。

Instant是最等价类java.util.DateZonedDateTime是最等价类java.util.GregorianCalendar

在可能的情况下,应用程序应该使用LocalDateLocalTimeLocalDateTime更好的域模型。例如,一个生日应该存储在代码LocalDate。记住,使用任何一个time-zone,如欧洲/巴黎,将相当复杂的计算。许多应用程序可以只写使用LocalDateLocalTimeInstant,在用户界面上添加的时区(UI)层。

根据日期时间类型OffsetTimeOffsetDateTime偏移,用于网络协议和数据库访问。例如,大多数数据库不能自动存储一个时间区如欧洲/巴黎,但他们可以存储偏移像' + ' 02:00。

课程还提供一个日期,最重要的部分包括MonthDayOfWeekYearYearMonthMonthDay。这些可以用来模拟更复杂的日期时间概念。例如,YearMonth用于代表一个信用卡有效期。

请注意,虽然有大量的类代表日期的不同方面,但很少有处理时间的不同方面的处理。以下类型的安全性,其逻辑结论会导致方法重写,继承类小时分钟,小时分钟秒和小时秒秒秒。虽然逻辑上是纯粹的,这是不是一个实用的选择,因为它将几乎增加了三倍,由于日期和时间的组合。因此,LocalTime用于所有精度的时间,用来暗示低精度的零。

以下完全的类型安全的最终结论也可能认为一个单独的类中的每个字段的日期时间,如一个类和一个dayofmonth hourofday。这种方法被尝试过,但在java语言过于复杂,缺乏实用性。类似的问题发生与期间。有一个单独的类的一个单独的类,每个周期单元,如一个类型为几年和一个类型的分钟。然而,这产生了大量的类和类型转换的问题。因此,提供的日期时间类型的集合是纯度和实用性之间的一种折衷。

在方法的数量方面有一个比较大的表面积。这是通过使用一致的方法管理的前缀。

多日历系统是一个尴尬的除了设计挑战。第一个原则是大多数用户都希望标准的标准化的日历系统。因此,主要的类是异。第二个原则是,大多数想要一个非异化日历系统的人都希望它为用户交互,因此它是一个用户界面本地化的问题。因此,在数据模型和持久存储中,日期和时间对象应保持为标准化对象,只有转换为和从本地日历中显示的。日历系统将分别存储在用户首选项中。

有,但是,一些有限的使用情况下,用户认为他们需要存储和使用日期在任意日历系统在整个应用程序。这是由ChronoLocalDate,然而它是使用前阅读所有相关的警告在这个接口的Javadoc至关重要。总之,需要多个日历系统之间一般互操作通常需要写在一个非常不同的方式比单纯使用ISO的日历应用程序,因此,大多数应用程序应该使用ISO和避免ChronoLocalDate

该接口还专为用户的可扩展性,因为有许多方法计算时间。的fieldunit API,通过TemporalAccessorTemporal应用提供很大的灵活性。此外,该TemporalQueryTemporalAdjuster接口提供日常的力量,让代码阅读贴近业务需求:

z-34e23d3f-716d—4cf0-a5c7-0780646a333e
从以下版本开始:
JDK1.8
Skip navigation links
Java™ Platform
Standard Ed. 8

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.

本帮助文档是使用 《百度翻译》翻译,请与英文版配合使用 by--QQ:654638585