Spec-Zone.ru › OpenJDK 24

Интерфейс 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)
Проверяет, поддерживается ли указанное поле.

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

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

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

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

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

диапазон

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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/time/temporal/TemporalAccessor.html

Spec-Zone.ru

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