Интерфейс 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) Возвращает значение указанного поля в качестве |
long |
getLong(TemporalField field) Возвращает значение указанного поля как |
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 — если нет
range
default ValueRange range(TemporalField field)
Получает диапазон допустимых значений для указанного поля.
Все поля могут быть выражены как целое число long. Этот метод возвращает объект, описывающий допустимый диапазон для этого значения. Значение этого временного объекта используется для повышения точности возвращаемого диапазона. Если дата-время не может вернуть диапазон, потому что поле не поддерживается или по какой-либо другой причине, будет выброшено исключение.
Обратите внимание, что результат описывает только минимальное и максимальное допустимые значения, и не стоит слишком много о них думать. Например, могут существовать значения в диапазоне, которые не являются допустимыми для поля.
- Требования к реализации:
- Реализации должны проверять и обрабатывать все поля, определённые в
ChronoField. Если поле поддерживается, то должен быть возвращён диапазон поля. Если не поддерживается, то должно быть выброшеноUnsupportedTemporalTypeException.Если поле не является
ChronoField, результат этого метода получается путем вызоваTemporalField.rangeRefinedBy(TemporalAccessorl), передав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, 2020, 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.