Package java.time.temporal
使用字段和单位以及日期时间调整器访问日期和时间。
此包扩展了基本包,为更强大的用例提供了额外的功能。支持包括:
- 日期时间单位,如年、月、日和小时
- 日期时间字段,如年份、星期几或小时数
- 日期时间调整函数
- 不同的周定义
字段和单位
日期和时间以字段和单位的形式表示。单位用于测量时间量,如年、日或分钟。所有单位都实现了TemporalUnit
。一组众所周知的单位在ChronoUnit
中定义,如DAYS
。单位接口设计为允许应用程序定义单位。
字段用于表示较大日期时间的一部分,如年、月份或秒。所有字段都实现了TemporalField
。一组众所周知的字段在ChronoField
中定义,如HOUR_OF_DAY
。额外的字段由JulianFields
、WeekFields
和IsoFields
定义。字段接口设计为允许应用程序定义字段。
此包提供了工具,允许以最适合框架的一般方式访问日期和时间的单位和字段。Temporal
提供了支持字段的日期时间类型的抽象。其方法支持获取字段的值,创建具有修改后的字段值的新日期时间,并查询附加信息,通常用于提取偏移量或时区。
应用程序代码中字段的一个用途是检索没有便利方法的字段。例如,获取月份的日期是足够常见的,LocalDate
上有一个叫做getDayOfMonth()
的方法。但是对于更不寻常的字段,需要使用字段。例如,date.get(ChronoField.ALIGNED_WEEK_OF_MONTH)
。字段还提供对有效值范围的访问。
调整和查询
日期时间问题领域的一个关键部分是将日期调整为新的相关值,例如“月底”或“下周三”。这些被建模为调整基本日期时间的函数。这些函数实现了TemporalAdjuster
并在Temporal
上操作。一组常见函数在TemporalAdjusters
中提供。例如,要找到给定日期后的某个星期几的第一次出现,使用TemporalAdjusters.next(DayOfWeek)
,如date.with(next(MONDAY))
。应用程序还可以通过实现TemporalAdjuster
来定义调整器。
TemporalAmount
接口模型化相对时间量。
除了调整日期时间,还提供了一个接口以通过TemporalQuery
进行查询。查询接口的最常见实现是方法引用。主要类上的from(TemporalAccessor)
方法都可以使用,如LocalDate::from
或Month::from
。进一步的实现在TemporalQueries
中作为静态方法提供。应用程序还可以通过实现TemporalQuery
来定义查询。
周
不同的地区对周的定义不同。例如,在欧洲,一周通常从星期一开始,而在美国,一周从星期日开始。WeekFields
类对此区别进行建模。
ISO日历系统定义了一种基于整个星期一到星期一的年份划分。这在IsoFields
中进行了建模。
包规范
除非另有说明,在此包中的任何类或接口的构造函数或方法中传递空参数将导致抛出NullPointerException
。Javadoc的“@param”定义用于总结空值行为。在每个方法中未明确记录“@throws NullPointerException
”。
所有计算应检查数值溢出并抛出ArithmeticException
或DateTimeException
。
- 自版本:
- 1.8
-
ClassDescription一组标准字段。一组标准日期周期单位。特定于ISO-8601日历系统的字段和单位,包括季度和基于周的年份。提供访问儒略日的日期字段集。框架级接口,定义对日期时间对象(如日期、时间、偏移或这些组合)的读写访问。框架级接口,定义对日期时间对象(如日期、时间、偏移或这些组合)的只读访问。调整日期时间对象的策略。常见且有用的TemporalAdjusters。定义时间量的框架级接口,如“6小时”、“8天”或“2年3个月”。日期时间字段,如年份或小时数。
TemporalQuery
的常见实现。查询日期时间对象的策略。日期时间单位,如天或小时。UnsupportedTemporalTypeException指示不支持Temporal类的ChronoField或ChronoUnit。日期时间字段的有效值范围。星期几、月中的周和年中的周的本地化定义。