Spec-Zone.ru › OpenJDK 21

Класс TemporalQueries

java.lang.Object
java.time.temporal.TemporalQueries
public final class TemporalQueries extends Object
Общие реализации TemporalQuery.

Этот класс предоставляет общие реализации TemporalQuery. Они определены здесь, так как должны быть константами, а определение лямбда-выражений не гарантирует этого. Присваивая их один раз здесь, они становятся обычными Java-константами.

Запросы являются ключевым инструментом для извлечения информации из временных объектов. Они существуют для внешней реализации процесса запроса, позволяя различные подходы, согласно паттерну проектирования стратегии. Примеры могут включать запрос, проверяющий, является ли дата днем до 29 февраля в високосном году, или вычисление количества дней до следующего дня рождения.

Интерфейс TemporalField предоставляет другой механизм для запроса временных объектов. Этот интерфейс ограничен возвратом long. В отличие от этого, запросы могут возвращать любой тип.

Существует два эквивалентных способа использования TemporalQuery. Первый — вызвать метод непосредственно в этом интерфейсе. Второй — использовать TemporalAccessor.query(TemporalQuery):

   // these two lines are equivalent, but the second approach is recommended
   temporal = thisQuery.queryFrom(temporal);
   temporal = temporal.query(thisQuery);
 
Рекомендуется использовать второй подход, query(TemporalQuery), так как он значительно более понятен в коде.

Наиболее распространёнными реализациями являются ссылки на методы, такие как LocalDate::from и ZoneId::from. Дополнительные общие запросы предназначены для возвращения:

  • календаря,
  • даты,
  • времени,
  • смещения зоны,
  • точности,
  • зоны, или
  • идентификатора зоны.
Since:
1.8

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

Модификатор и тип Метод Описание
static TemporalQuery<Chronology> chronology()
Запрос для Chronology.
static TemporalQuery<LocalDate> localDate()
Запрос для LocalDate возвращающий null, если не найден.
static TemporalQuery<LocalTime> localTime()
Запрос для LocalTime возвращающий null, если не найден.
static TemporalQuery<ZoneOffset> offset()
Запрос для ZoneOffset возвращающий null, если не найден.
static TemporalQuery<TemporalUnit> precision()
Запрос для наименьшего поддерживаемого элемента.
static TemporalQuery<ZoneId> zone()
Гибкий запрос для ZoneId, использующий ZoneOffset в качестве резервного варианта.
static TemporalQuery<ZoneId> zoneId()
Строгий запрос для ZoneId.

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

zoneId

public static TemporalQuery<ZoneId> zoneId()
Строгий запрос для ZoneId.

Этот запрос получает часовой пояс для TemporalAccessor. Часовой пояс возвращается только если объект времени концептуально содержит ZoneId. Он не будет возвращен, если объект времени концептуально содержит только ZoneOffset. Таким образом, ZonedDateTime вернет результат getZone(), а OffsetDateTime вернет null.

В большинстве случаев приложения должны использовать zone(), так как этот запрос слишком строгий.

Результат работы классов JDK, реализующих TemporalAccessor, следующий:
LocalDate возвращает null
LocalTime возвращает null
LocalDateTime возвращает null
ZonedDateTime возвращает связанный часовой пояс
OffsetTime возвращает null
OffsetDateTime возвращает null
ChronoLocalDate возвращает null
ChronoLocalDateTime возвращает null
ChronoZonedDateTime возвращает связанный часовой пояс
Era возвращает null
DayOfWeek возвращает null
Month возвращает null
Year возвращает null
YearMonth возвращает null
MonthDay возвращает null
ZoneOffset возвращает null
Instant возвращает null

Возвращает:
запрос, позволяющий получить идентификатор часового пояса временного объекта, не null

chronology

public static TemporalQuery<Chronology> chronology()
Запрос для Chronology.

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

Результат работы классов JDK, реализующих TemporalAccessor, следующий:
LocalDate возвращает IsoChronology.INSTANCE
LocalTime возвращает null (не представляет дату)
LocalDateTime возвращает IsoChronology.INSTANCE
ZonedDateTime возвращает IsoChronology.INSTANCE
OffsetTime возвращает null (не представляет дату)
OffsetDateTime возвращает IsoChronology.INSTANCE
ChronoLocalDate возвращает связанную хронологию
ChronoLocalDateTime возвращает связанную хронологию
ChronoZonedDateTime возвращает связанную хронологию
Era возвращает связанную хронологию
DayOfWeek возвращает null (общий для всех хронологий)
Month возвращает IsoChronology.INSTANCE
Year возвращает IsoChronology.INSTANCE
YearMonth возвращает IsoChronology.INSTANCE
MonthDay возвращает null IsoChronology.INSTANCE
ZoneOffset возвращает null (не представляет дату)
Instant возвращает null (не представляет дату)

Метод Chronology.from(TemporalAccessor) может использоваться как TemporalQuery через ссылку на метод, Chronology::from. Этот метод эквивалентен этому запросу, за исключением того, что он генерирует исключение, если хронология не может быть получена.

Возвращает:
запрос, позволяющий получить хронологию временного объекта, не null

precision

public static TemporalQuery<TemporalUnit> precision()
Запрос на минимальную поддерживаемую единицу.

Этот запрос получает точность времени для TemporalAccessor. Если целевой TemporalAccessor представляет согласованную или полную дату-время, дату или время, то он должен вернуть минимальную поддерживаемую точность. Обратите внимание, что поля, такие как NANO_OF_DAY и NANO_OF_SECOND определены как всегда игнорирующие точность, поэтому это единственный способ узнать фактическую минимальную поддерживаемую единицу. Например, если бы GregorianCalendar реализовывал TemporalAccessor, он бы вернул точность MILLIS.

Результат работы классов JDK, реализующих TemporalAccessor, следующий:
LocalDate возвращает DAYS
LocalTime возвращает NANOS
LocalDateTime возвращает NANOS
ZonedDateTime возвращает NANOS
OffsetTime возвращает NANOS
OffsetDateTime возвращает NANOS
ChronoLocalDate возвращает DAYS
ChronoLocalDateTime возвращает NANOS
ChronoZonedDateTime возвращает NANOS
Era возвращает ERAS
DayOfWeek возвращает DAYS
Month возвращает MONTHS
Year возвращает YEARS
YearMonth возвращает MONTHS
MonthDay возвращает null (не представляет полную дату или время)
ZoneOffset возвращает null (не представляет дату или время)
Instant возвращает NANOS

Возвращает:
запрос, позволяющий получить точность временного объекта, не null

zone

public static TemporalQuery<ZoneId> zone()
Универсальный запрос для ZoneId, использующий ZoneOffset в качестве резервного варианта.

Этот запрос получает часовой пояс для TemporalAccessor. Сначала он пытается получить часовой пояс, используя zoneId(). Если он не найден, он пытается получить offset(). Таким образом, ZonedDateTime вернет результат getZone(), а OffsetDateTime вернет результат getOffset().

В большинстве случаев приложения должны использовать этот запрос, а не #zoneId().

Метод ZoneId.from(TemporalAccessor) может использоваться как TemporalQuery через ссылку на метод, ZoneId::from. Этот метод эквивалентен этому запросу, за исключением того, что он генерирует исключение, если часовой пояс не может быть получен.

Возвращает:
запрос, позволяющий получить идентификатор часового пояса или смещение временного объекта, не null

offset

public static TemporalQuery<ZoneOffset> offset()
Запрос на ZoneOffset, возвращающий null, если не найден.

Возвращает TemporalQuery, который можно использовать для запроса временного объекта по смещению. Запрос вернет null, если временной объект не может предоставить смещение.

Реализация запроса проверяет поле OFFSET_SECONDS и использует его для создания ZoneOffset.

Метод ZoneOffset.from(TemporalAccessor) может использоваться как TemporalQuery через ссылку на метод, ZoneOffset::from. Этот запрос и ZoneOffset::from вернут один и тот же результат, если временной объект содержит смещение. Если временной объект не содержит смещения, ссылка на метод сгенерирует исключение, а этот запрос вернет null.

Возвращает:
запрос, позволяющий получить смещение временного объекта, не null

localDate

public static TemporalQuery<LocalDate> localDate()
Запрос на LocalDate, возвращающий null, если не найден.

Возвращает TemporalQuery, который можно использовать для запроса временного объекта по локальной дате. Запрос вернет null, если временной объект не может предоставить локальную дату.

Реализация запроса проверяет поле EPOCH_DAY и использует его для создания LocalDate.

Метод LocalDate.from(TemporalAccessor) может использоваться как TemporalQuery через ссылку на метод, LocalDate::from. Этот запрос и LocalDate::from вернут один и тот же результат, если временной объект содержит дату. Если временной объект не содержит даты, ссылка на метод сгенерирует исключение, а этот запрос вернет null.

Возвращает:
запрос, позволяющий получить дату временного объекта, не null

localTime

public static TemporalQuery<LocalTime> localTime()
Запрос на LocalTime, возвращающий null, если не найден.

Возвращает TemporalQuery, который можно использовать для запроса временного объекта по локальному времени. Запрос вернет null, если временной объект не может предоставить локальное время.

Реализация запроса проверяет поле NANO_OF_DAY и использует его для создания LocalTime.

Метод LocalTime.from(TemporalAccessor) может использоваться как TemporalQuery через ссылку на метод, LocalTime::from. Этот запрос и LocalTime::from вернут один и тот же результат, если временной объект содержит время. Если временной объект не содержит времени, ссылка на метод сгенерирует исключение, а этот запрос вернет null.

Возвращает:
запрос, позволяющий получить время временного объекта, не null

© 1993, 2023, 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/21/docs/api/java.base/java/time/temporal/TemporalQueries.html

Spec-Zone.ru

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