Spec-Zone.ru › OpenJDK 25

Интерфейс TemporalField

Все известные реализующие классы:
ChronoField
public interface TemporalField
Поле даты и времени, например месяц года или минута часа.

Дата и время выражаются с помощью полей, которые делят временную шкалу на понятные людям составляющие. Реализации этого интерфейса представляют такие поля.

Наиболее часто используемые единицы определены в ChronoField. Дополнительные поля предоставляются в IsoFields, WeekFields и JulianFields. Поля также можно создавать в коде приложения, реализуя этот интерфейс.

Поле работает с помощью двойной диспетчеризации. Клиентский код вызывает методы объекта даты и времени, например LocalDateTime, которые проверяют, является ли поле ChronoField. Если да, объект даты и времени должен обработать его. В противном случае вызов метода перенаправляется соответствующему методу этого интерфейса.

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

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

Модификатор и тип Метод Описание
<R extends Temporal>
R
adjustInto(R temporal, long newValue)
Возвращает копию указанного временного объекта, в которой установлено значение этого поля.
TemporalUnit getBaseUnit()
Возвращает единицу измерения поля.
default String getDisplayName(Locale locale)
Возвращает отображаемое название поля для указанной локали.
long getFrom(TemporalAccessor temporal)
Возвращает значение этого поля из указанного временного объекта.
TemporalUnit getRangeUnit()
Возвращает диапазон, в пределах которого изменяется поле.
boolean isDateBased()
Проверяет, представляет ли это поле составляющую даты.
boolean isSupportedBy(TemporalAccessor temporal)
Проверяет, поддерживается ли это поле временным объектом.
boolean isTimeBased()
Проверяет, представляет ли это поле составляющую времени.
ValueRange range()
Возвращает диапазон допустимых значений поля.
ValueRange rangeRefinedBy(TemporalAccessor temporal)
Возвращает диапазон допустимых значений этого поля, уточняя результат с помощью временного объекта.
default TemporalAccessor resolve(Map<TemporalField, Long> fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle)
Разрешает это поле, предоставляя более простой эквивалент или дату.
String toString()
Возвращает описательное название поля.

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

getDisplayName

default String getDisplayName(Locale locale)
Возвращает отображаемое название поля для указанной локали.

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

Реализация по умолчанию должна проверить, что локаль не равна null, и вернуть toString().

Параметры:
locale — используемая локаль, не null
Возвращает:
отображаемое название для локали или подходящее значение по умолчанию, не null

getBaseUnit

TemporalUnit getBaseUnit()
Возвращает единицу измерения поля.

Единица измерения поля — это период, в пределах которого оно изменяется. Например, для поля 'MonthOfYear' единицей измерения являются 'Months'. См. также getRangeUnit().

Возвращает:
единицу измерения, определяющую базовую единицу поля, не null

getRangeUnit

TemporalUnit getRangeUnit()
Возвращает диапазон, в пределах которого изменяется поле.

Диапазон поля — это период, в пределах которого поле изменяется. Например, для поля 'MonthOfYear' диапазоном являются 'Years'. См. также getBaseUnit().

Диапазон никогда не равен null. Например, поле 'Year' является сокращением для 'YearOfForever'. Поэтому его единица измерения — 'Years', а диапазон — 'Forever'.

Возвращает:
единицу измерения, определяющую диапазон поля, не null

range

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

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

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

Возвращает:
диапазон допустимых значений поля, не null

isDateBased

boolean isDateBased()
Проверяет, представляет ли это поле составляющую даты.

Поле основано на дате, если его можно получить из EPOCH_DAY. Обратите внимание, что допустимо, если и isDateBased(), и isTimeBased() возвращают false, например, когда поле представляет минуту недели.

Возвращает:
true, если это поле является составляющей даты

isTimeBased

boolean isTimeBased()
Проверяет, представляет ли это поле составляющую времени.

Поле основано на времени, если его можно получить из NANO_OF_DAY. Обратите внимание, что допустимо, если и isDateBased(), и isTimeBased() возвращают false, например, когда поле представляет минуту недели.

Возвращает:
true, если это поле является составляющей времени

isSupportedBy

boolean isSupportedBy(TemporalAccessor temporal)
Проверяет, поддерживается ли это поле временным объектом.

Этот метод определяет, поддерживает ли временной аксессор это поле. Если метод возвращает false, запросить это поле у временного объекта нельзя.

Этот метод можно использовать двумя эквивалентными способами. Первый — вызвать его напрямую. Второй — использовать TemporalAccessor.isSupported(TemporalField):

  // these two lines are equivalent, but the second approach is recommended
  temporal = thisField.isSupportedBy(temporal);
  temporal = temporal.isSupported(thisField);
Рекомендуется использовать второй подход, isSupported(TemporalField), поскольку такой код гораздо понятнее.

Реализации должны определять поддержку, используя поля, доступные в ChronoField.

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

rangeRefinedBy

ValueRange rangeRefinedBy(TemporalAccessor temporal)
Возвращает диапазон допустимых значений этого поля, уточняя результат с помощью временного объекта.

Этот метод использует временной объект, чтобы определить диапазон допустимых значений поля. Он похож на range(), однако уточняет результат с учетом временного объекта. Например, если поле — DAY_OF_MONTH, метод range не дает точного результата, поскольку длина месяца может составлять 28, 29, 30 или 31 день. Использование этого метода с датой позволяет получить точный диапазон, выбрав один из этих четырех вариантов.

Этот метод можно использовать двумя эквивалентными способами. Первый — вызвать его напрямую. Второй — использовать TemporalAccessor.range(TemporalField):

  // these two lines are equivalent, but the second approach is recommended
  temporal = thisField.rangeRefinedBy(temporal);
  temporal = temporal.range(thisField);
Рекомендуется использовать второй подход, range(TemporalField), поскольку такой код гораздо понятнее.

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

Параметры:
temporal — временной объект, используемый для уточнения результата, не null
Возвращает:
диапазон допустимых значений этого поля, не null
Выбрасывает:
DateTimeException — если диапазон поля невозможно получить
UnsupportedTemporalTypeException — если временной объект не поддерживает это поле

getFrom

long getFrom(TemporalAccessor temporal)
Возвращает значение этого поля из указанного временного объекта.

Этот метод запрашивает у временного объекта значение данного поля.

Этот метод можно использовать двумя эквивалентными способами. Первый — вызвать его напрямую. Второй — использовать TemporalAccessor.getLong(TemporalField) (или TemporalAccessor.get(TemporalField)):

  // these two lines are equivalent, but the second approach is recommended
  temporal = thisField.getFrom(temporal);
  temporal = temporal.getLong(thisField);
Рекомендуется использовать второй подход, getLong(TemporalField), поскольку такой код гораздо понятнее.

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

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

adjustInto

<R extends Temporal> R adjustInto(R temporal, long newValue)
Возвращает копию указанного временного объекта, в которой установлено значение этого поля.

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

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

Этот метод можно использовать двумя эквивалентными способами. Первый — вызвать его напрямую. Второй — использовать Temporal.with(TemporalField, long):

  // these two lines are equivalent, but the second approach is recommended
  temporal = thisField.adjustInto(temporal);
  temporal = temporal.with(thisField);
Рекомендуется использовать второй подход, with(TemporalField), поскольку такой код гораздо понятнее.

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

Реализации не должны изменять указанный временной объект. Вместо этого необходимо вернуть скорректированную копию исходного объекта. Это обеспечивает эквивалентное безопасное поведение для неизменяемых и изменяемых реализаций.

Параметры типа:
R — тип объекта Temporal
Параметры:
temporal — временной объект для корректировки, не null
newValue — новое значение поля
Возвращает:
скорректированный временной объект, не null
Выбрасывает:
DateTimeException — если поле невозможно установить
UnsupportedTemporalTypeException — если временной объект не поддерживает это поле
ArithmeticException — при переполнении числового значения

resolve

default TemporalAccessor resolve(Map<TemporalField, Long> fieldValues, TemporalAccessor partialTemporal, ResolverStyle resolverStyle)
Разрешает это поле, предоставляя более простой эквивалент или дату.

Этот метод вызывается на этапе разрешения при разборе. Он предназначен для преобразования определенных приложением полей в более стандартные поля, например поля ChronoField, или в дату.

Обычно приложениям не следует вызывать этот метод напрямую.

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

Указанная карта содержит текущее состояние разбора. Карта является изменяемой, и для разрешения поля и связанных с ним полей ее необходимо изменять. Этот метод вызывается во время разбора только в том случае, если карта содержит данное поле, поэтому реализациям следует считать, что оно присутствует.

Разрешение поля включает проверку значения этого поля и, возможно, других полей, а затем обновление карты более простым значением, например ChronoField, или возврат полностью сформированного объекта ChronoLocalDate. При успешном разрешении код должен удалить из карты все разрешенные поля, включая это поле.

Например, класс IsoFields содержит поля квартала года и дня квартала. Реализация этого метода в данном классе разрешает эти два поля вместе с YEAR в полностью сформированный объект LocalDate. Перед возвратом объекта LocalDate метод resolve удаляет из карты все три поля.

Частично сформированный временной объект используется для запросов хронологии и часового пояса. Как правило, требуется только хронология. Запрос других данных, кроме часового пояса или хронологии, не определен и на него нельзя полагаться. Поведение других методов, таких как get, getLong, range и isSupported, непредсказуемо, а результаты не определены.

Если разрешение возможно, но данные недопустимы, для определения подходящего уровня снисходительности следует использовать стиль разрешения; это может потребовать выброса DateTimeException или ArithmeticException. Если разрешение невозможно, метод resolve должен вернуть null.

При разрешении полей времени карта будет изменена, а метод вернет null. При разрешении полей даты метод обычно возвращает дату, изменяя карту и удаляя из нее разрешенные поля. Однако допустимо также разрешить поля даты в другие экземпляры ChronoField, способные сформировать дату, например EPOCH_DAY.

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

Реализация по умолчанию должна возвращать null.

Параметры:
fieldValues — карта полей и значений, которую можно изменять, не null
partialTemporal — частично сформированный временной объект для запроса часового пояса и хронологии; запрос других данных не определен и не рекомендуется, не null
resolverStyle — запрошенный тип разрешения, не null
Возвращает:
разрешенный временной объект; null, если разрешение изменило только карту или не было выполнено
Выбрасывает:
ArithmeticException — при переполнении числового значения
DateTimeException — если при разрешении возникает ошибка. Это исключение нельзя выбрасывать при запросе поля у временного объекта, не проверив предварительно, поддерживается ли оно

toString

String toString()
Возвращает описательное название поля.

Название должно иметь формат 'BaseOfRange', например 'MonthOfYear', если только диапазоном поля не является FOREVER; в этом случае указывается только базовая единица, например 'Year' или 'Era'.

Переопределяет:
toString в классе Object
Возвращает:
название поля, не null

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по 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/TemporalField.html

Spec-Zone.ru

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