Класс 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. Также предоставляются распространённые запросы для получения:
- хронологии,
- LocalDate,
- LocalTime,
- ZoneOffset,
- точности,
- зоны или
- zoneId.
- Начиная с:
- 1.8
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static TemporalQuery |
chronology() |
Запрос для Chronology. |
static TemporalQuery |
localDate() |
Запрос для LocalDate; возвращает null, если значение не найдено. |
static TemporalQuery |
localTime() |
Запрос для LocalTime; возвращает null, если значение не найдено. |
static TemporalQuery |
offset() |
Запрос для ZoneOffset; возвращает null, если значение не найдено. |
static TemporalQuery |
precision() |
Запрос для наименьшей поддерживаемой единицы измерения. |
static TemporalQuery |
zone() |
Нестрогий запрос для ZoneId с переходом к ZoneOffset, если это значение недоступно. |
static TemporalQuery |
zoneId() |
Строгий запрос для ZoneId. |
Подробное описание методов
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, 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/TemporalQueries.html