Spec-Zone.ru › OpenJDK 17

Интерфейс 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 - временной объект для изменения, не 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, 2021, 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/17/docs/api/java.base/java/time/temporal/TemporalField.html

Spec-Zone.ru

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