Интерфейс 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 |
Возвращает значение указанного поля в виде int. |
long |
getLong |
Возвращает значение указанного поля в виде long. |
boolean |
isSupported |
Проверяет, поддерживается ли указанное поле. |
default <R> R |
query |
Выполняет запрос к этой дате и времени. |
default ValueRange |
range |
Возвращает диапазон допустимых значений указанного поля. |
Подробное описание методов
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— при числовом переполнении
© 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