模块 java.base

包 java.time.temporal


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::fromMonth::fromTemporalQueries 中提供了进一步的实现作为静态方法。应用程序还可以通过实现 TemporalQuery 来定义查询。

不同的地区对星期有不同的定义。例如,在欧洲,一周通常从星期一开始,而在美国则从星期日开始。 WeekFields 类模拟了这种区别。

ISO 日历系统定义了一个额外的基于周的年份划分。这定义了基于整个周一到周一周的一年。这是在 IsoFields 中建模的。

包装规格

除非另有说明,否则将 null 参数传递给此包中任何类或接口中的构造函数或方法将导致抛出 NullPointerException 。 Javadoc“@param”定义用于总结空行为。每个方法中都没有明确记录“@throws NullPointerException ”。

所有计算都应检查数字溢出并抛出 ArithmeticException DateTimeException

自从:
1.8
  • 描述
    一组标准字段。
    一组标准的日期周期单位。
    特定于 ISO-8601 日历系统的字段和单位,包括季度和基于周的年份。
    一组提供对儒略日的访问的日期字段。
    定义对时间对象的读写访问的框架级接口,例如日期、时间、偏移量或这些的某种组合。
    框架级接口定义对时间对象的只读访问,例如日期、时间、偏移量或这些的某种组合。
    调整时间对象的策略。
    常见且有用的 TemporalAdjusters。
    定义时间量的框架级接口,例如“6 小时”、“8 天”或“2 年零 3 个月”。
    日期时间字段,例如年月或小时分钟。
    TemporalQuery 的常见实现。
    查询时间对象的策略。
    日期时间单位,例如天或小时。
    UnsupportedTemporalTypeException 表示时间类不支持 ChronoField 或 ChronoUnit。
    日期时间字段的有效值范围。
    星期几、星期几和星期几字段的本地化定义。