Spec-Zone.ru › OpenJDK 24

Интерфейс 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. Метод resolve удалит все три поля из карты перед возвращением LocalDate.

Неполный временной интервал используется для запроса хронологии и зоны. Как правило, потребуется только хронология. Запрос других элементов, кроме зоны или хронологии, не определен и не должен использоваться. Поведение других методов, таких как 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

© 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/TemporalField.html

Spec-Zone.ru

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