Spec-Zone.ru › OpenJDK 25

Интерфейс TemporalAccessor

Все известные подинтерфейсы:
ChronoLocalDate, ChronoLocalDateTime<D>, ChronoZonedDateTime<D>, Era, Temporal
Все известные реализующие классы:
DayOfWeek, HijrahDate, HijrahEra, Instant, IsoEra, JapaneseDate, JapaneseEra, LocalDate, LocalDateTime, LocalTime, MinguoDate, MinguoEra, Month, MonthDay, OffsetDateTime, OffsetTime, ThaiBuddhistDate, ThaiBuddhistEra, Year, YearMonth, ZonedDateTime, ZoneOffset
public interface TemporalAccessor
Интерфейс уровня платформы, определяющий доступ только для чтения к объекту даты и времени, например дате, времени, смещению или некоторой их комбинации.

Это базовый тип интерфейса для объектов даты, времени и смещения. Он реализуется классами, которые могут предоставлять информацию в виде полей или запросов.

Большую часть информации о дате и времени можно представить числом. Она моделируется с помощью TemporalField, при этом число хранится с использованием long для работы с большими значениями. Год, месяц и день месяца — простые примеры полей, но к ним также относятся момент времени и смещения. См. ChronoField, где приведён стандартный набор полей.

Две части информации о дате и времени нельзя представить числами: календарную систему и часовой пояс. К ним можно получить доступ с помощью запросов, используя статические методы, определённые в TemporalQuery.

Подинтерфейс Temporal расширяет это определение, добавляя поддержку корректировки и изменения более полноценных объектов даты и времени.

Этот интерфейс относится к уровню платформы, поэтому его не следует широко использовать в коде приложений. Вместо этого приложениям следует создавать и передавать экземпляры конкретных типов, таких как LocalDate. Для этого есть много причин; одна из них заключается в том, что реализации этого интерфейса могут использовать календарные системы, отличные от ISO. Более подробно эти вопросы рассматриваются в ChronoLocalDate.

Требования к реализации:
Этот интерфейс не накладывает ограничений на изменяемость реализаций, однако настоятельно рекомендуется использовать неизменяемые реализации.
С версии:
1.8

Краткое описание методов

Модификатор и тип Метод Описание
default int get(TemporalField field)
Возвращает значение указанного поля в виде int.
long getLong(TemporalField field)
Возвращает значение указанного поля в виде long.
boolean isSupported(TemporalField field)
Проверяет, поддерживается ли указанное поле.
default <R> R query(TemporalQuery<R> query)
Выполняет запрос к этой дате и времени.
default ValueRange range(TemporalField field)
Возвращает диапазон допустимых значений указанного поля.

Подробное описание методов

isSupported

boolean isSupported(TemporalField field)
Проверяет, поддерживается ли указанное поле.

Эта проверка определяет, можно ли получить из даты и времени значение указанного поля. Если поле не поддерживается, вызовы методов range и get приведут к выбросу исключения.

Требования к реализации:
Реализации должны проверять и обрабатывать все поля, определённые в ChronoField. Если поле поддерживается, необходимо вернуть true, в противном случае — false.

Если поле не является ChronoField, результат этого метода определяется вызовом TemporalField.isSupportedBy(TemporalAccessor) с передачей this в качестве аргумента.

Реализации должны гарантировать, что вызов этого метода, выполняющего чтение, не изменяет наблюдаемое состояние.

Параметры:
field — поле для проверки; null возвращает false
Возвращает:
true, если для этой даты и времени можно получить значение поля, иначе false

range

default ValueRange range(TemporalField field)
Возвращает диапазон допустимых значений указанного поля.

Все поля можно представить целым числом long. Этот метод возвращает объект, описывающий допустимый диапазон этого значения. Значение этого объекта даты и времени используется для повышения точности возвращаемого диапазона. Если дата и время не могут вернуть диапазон — поскольку поле не поддерживается или по какой-либо другой причине, — будет выброшено исключение.

Обратите внимание, что результат описывает только минимальные и максимальные допустимые значения, и не следует придавать им чрезмерное значение. Например, в диапазоне могут быть значения, недопустимые для данного поля.

Требования к реализации:
Реализации должны проверять и обрабатывать все поля, определённые в ChronoField. Если поле поддерживается, необходимо вернуть его диапазон. Если поле не поддерживается, необходимо выбросить UnsupportedTemporalTypeException.

Если поле не является ChronoField, результат этого метода определяется вызовом TemporalField.rangeRefinedBy(TemporalAccessor) с передачей this в качестве аргумента.

Реализации должны гарантировать, что вызов этого метода, выполняющего чтение, не изменяет наблюдаемое состояние.

Реализация по умолчанию должна вести себя так же, как следующий код:

 if (field instanceof ChronoField) {
   if (isSupported(field)) {
     return field.range();
   }
   throw new UnsupportedTemporalTypeException("Unsupported field: " + field);
 }
 return field.rangeRefinedBy(this);
Параметры:
field — поле, диапазон которого требуется получить; не null
Возвращает:
диапазон допустимых значений поля; не null
Выбрасывает:
DateTimeException — если не удаётся получить диапазон поля
UnsupportedTemporalTypeException — если поле не поддерживается

get

default int get(TemporalField field)
Возвращает значение указанного поля в виде int.

Этот метод запрашивает у даты и времени значение указанного поля. Возвращаемое значение всегда будет находиться в пределах допустимого диапазона значений поля. Если дата и время не могут вернуть значение — поскольку поле не поддерживается или по какой-либо другой причине, — будет выброшено исключение.

Требования к реализации:
Реализации должны проверять и обрабатывать все поля, определённые в ChronoField. Если поле поддерживается и имеет диапазон int, необходимо вернуть значение поля. Если поле не поддерживается, необходимо выбросить UnsupportedTemporalTypeException.

Если поле не является ChronoField, результат этого метода определяется вызовом TemporalField.getFrom(TemporalAccessor) с передачей this в качестве аргумента.

Реализации должны гарантировать, что вызов этого метода, выполняющего чтение, не изменяет наблюдаемое состояние.

Реализация по умолчанию должна вести себя так же, как следующий код:

 if (range(field).isIntValue()) {
   return range(field).checkValidIntValue(getLong(field), field);
 }
 throw new UnsupportedTemporalTypeException("Invalid field " + field + " + for get() method, use getLong() instead");
Параметры:
field — поле, значение которого требуется получить; не null
Возвращает:
значение поля в пределах допустимого диапазона значений
Выбрасывает:
DateTimeException — если не удаётся получить значение поля или оно находится за пределами допустимого диапазона значений поля
UnsupportedTemporalTypeException — если поле не поддерживается или диапазон значений превышает int
ArithmeticException — при числовом переполнении

getLong

long getLong(TemporalField field)
Возвращает значение указанного поля в виде long.

Этот метод запрашивает у даты и времени значение указанного поля. Возвращаемое значение может находиться за пределами допустимого диапазона значений поля. Если дата и время не могут вернуть значение — поскольку поле не поддерживается или по какой-либо другой причине, — будет выброшено исключение.

Требования к реализации:
Реализации должны проверять и обрабатывать все поля, определённые в ChronoField. Если поле поддерживается, необходимо вернуть его значение. Если поле не поддерживается, необходимо выбросить UnsupportedTemporalTypeException.

Если поле не является ChronoField, результат этого метода определяется вызовом TemporalField.getFrom(TemporalAccessor) с передачей this в качестве аргумента.

Реализации должны гарантировать, что вызов этого метода, выполняющего чтение, не изменяет наблюдаемое состояние.

Параметры:
field — поле, значение которого требуется получить; не null
Возвращает:
значение поля
Выбрасывает:
DateTimeException — если не удаётся получить значение поля
UnsupportedTemporalTypeException — если поле не поддерживается
ArithmeticException — при числовом переполнении

query

default <R> R query(TemporalQuery<R> query)
Выполняет запрос к этой дате и времени.

Этот метод выполняет запрос к дате и времени с помощью указанного объекта стратегии запроса.

Запросы — важный инструмент для извлечения информации из даты и времени. Они позволяют вынести процесс выполнения запроса во внешний объект, предоставляя возможность использовать разные подходы согласно шаблону проектирования «Стратегия». Например, запрос может проверять, является ли дата днём перед 29 февраля в високосном году, или вычислять количество дней до следующего дня рождения.

Чаще всего в качестве реализаций запросов используются ссылки на методы, например LocalDate::from и ZoneId::from. Дополнительные реализации предоставляются в виде статических методов в TemporalQuery.

Требования к реализации:
Реализация по умолчанию должна вести себя так же, как следующий код:
 if (query == TemporalQueries.zoneId() ||
       query == TemporalQueries.chronology() || query == TemporalQueries.precision()) {
   return null;
 }
 return query.queryFrom(this);
В будущих версиях в условный оператор if могут быть добавлены дополнительные запросы.

Все классы, реализующие этот интерфейс и переопределяющие этот метод, должны вызывать TemporalAccessor.super.query(query). Классы JDK могут не вызывать super, если они обеспечивают поведение, эквивалентное поведению реализации по умолчанию; однако классы, не входящие в JDK, не могут использовать эту оптимизацию и должны вызывать super.

Если реализация может предоставить значение для одного из запросов, перечисленных в условном операторе if реализации по умолчанию, она должна это сделать. Например, класс HourMin, определённый в приложении и хранящий часы и минуты, должен переопределить этот метод следующим образом:

 if (query == TemporalQueries.precision()) {
   return MINUTES;
 }
 return TemporalAccessor.super.query(query);

Реализации должны гарантировать, что вызов этого метода, выполняющего чтение, не изменяет наблюдаемое состояние.

Параметры типа:
R — тип результата
Параметры:
query — запрос для выполнения; не null
Возвращает:
результат запроса; может быть возвращено значение null (это определяется запросом)
Выбрасывает:
DateTimeException — если невозможно выполнить запрос
ArithmeticException — при числовом переполнении

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/time/temporal/TemporalAccessor.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API