Руководство Java TemporalQueries
1. TemporalQueries
Класс TemporalQueries предоставляет статические методы для получения общих и полезных объектов TemporalQuery. Информация, полученная от этих TemporalQuery, может быть:
- Chronology
- LocalDate
- LocalTime
- ZoneOffset
- Precision
- Zone
- ZoneId
См.также статью об интерфейсе TemporalQuery с базовым и пользовательским TemporalQuery:
Существует два способа запроса объекта TemporalAccessor, из них рекомендуется использовать второй подход.
// These two lines are equivalent, but the second approach is recommended
information = temporalQuery.queryFrom(temporalAccessor); // (1)
information = temporalAccessor.query(temporalQuery); // (2)
2. TemporalQueries methods
Все методы, предоставляемые классом TemporalQueries, являются статическими и возвращают объект TemporalQuery.
public static TemporalQuery<ZoneId> zoneId()
public static TemporalQuery<Chronology> chronology()
public static TemporalQuery<TemporalUnit> precision()
public static TemporalQuery<ZoneId> zone()
public static TemporalQuery<ZoneOffset> offset()
public static TemporalQuery<LocalDate> localDate()
public static TemporalQuery<LocalTime> localTime()
3. precision()
Возвращает TemporalQuery<TemporalUnit> для запроса наименьшую единицу (unit) измерения, поддерживаемого TemporalAcccessor.
public static TemporalQuery<TemporalUnit> precision()
Таблица классов, реализующих интерфейс TemporalAccessor, доступный в JDK, инаименьшая поддерживаемая единица измерения.
TemporalAccessor | Precision | isTimeBased() | isDateBased() |
Instant | NANOS | true | false |
LocalDate | DAYS | false | true |
LocalTime | NANOS | true | false |
LocalDateTime | NANOS | true | false |
ZonedDateTime | NANOS | true | false |
OffsetTime | NANOS | true | false |
OffsetDateTime | NANOS | true | false |
ChronoLocalDate | DAYS | false | true |
ChronoLocalDateTime | NANOS | true | false |
ChronoZonedDateTime | NANOS | true | false |
Era | ERAS | false | true |
DayOfWeek | DAYS | false | true |
Month | MONTHS | false | true |
Year | YEARS | false | true |
YearMonth | MONTHS | false | true |
MonthDay | null | ||
ZoneOffset | null |
Например:
TemporalQueries_precision_ex1.java
LocalDate localDate = LocalDate.now();
TemporalQuery<TemporalUnit> query = TemporalQueries.precision();
TemporalUnit smallestUnit = localDate.query(query); // Can cast to ChronoUnit
ChronoUnit smallestChronoUnit = (ChronoUnit) smallestUnit; // ChronoUnit.DAYS
System.out.println("localDate support smallest unit: " + smallestChronoUnit); // Days
System.out.println(" >> Name: " + smallestChronoUnit.name()); // DAYS
System.out.println(" >> isTimeBased()?: " + smallestChronoUnit.isTimeBased()); // false
System.out.println(" >> isDateBased()?: " + smallestChronoUnit.isDateBased()); // true
Output:
localDate support smallest unit: Days
>> Name: DAYS
>> isTimeBased()?: false
>> isDateBased()?: true
- TemporalAccessor
- TemporalUnit
- ChronoUnit
4. chronology()
Возвращает TemporalQuery<Chronology> для получения информации о Chronology (хронологии), связанной с TemporalAccessor.
public static TemporalQuery<Chronology> chronology()
TemporalAccessor | Return | Note |
ChronoLocalDate | Returns the associated chronology | |
ChronoLocalDateTime | Returns the associated chronology | |
ChronoZonedDateTime | Returns the associated chronology | |
Era | Returns the associated chronology | |
LocalDate |
Return
IsoChronology.INSTANCE | |
LocalDateTime |
Return
IsoChronology.INSTANCE | |
ZonedDateTime |
Return
IsoChronology.INSTANCE | |
OffsetDateTime |
Return
IsoChronology.INSTANCE | |
Month |
Return
IsoChronology.INSTANCE | |
Year |
Return
IsoChronology.INSTANCE | |
YearMonth |
Return
IsoChronology.INSTANCE | |
MonthDay |
Return
IsoChronology.INSTANCE | |
LocalTime | null | Does not represent a date |
OffsetTime | null | Does not represent a date |
ZoneOffset | null | Does not represent a date |
Instant | null | Does not represent a date |
DayOfWeek | null | Shared across chronologies |
TemporalQueries_chronology_ex1.java
TemporalAccessor localDateTime = LocalDateTime.now();
Chronology chronology = localDateTime.query(TemporalQueries.chronology());
System.out.println(chronology.getClass().getName()); // java.time.chrono.IsoChronology
System.out.println(chronology.getId()); // ISO
Ссылка на статический метод Chronology.from(TemporalAccessor) может использоваться в качестве TemporalQuery, соответствующего этому методу, за исключением того, что он может вызвать исключение, когда запрос не может вернуть результат.
TemporalQueries_chronology_ex2.java
TemporalQuery<Chronology> query = Chronology::from; // Method reference
// TemporalAccessor object:
TemporalAccessor temporalAccessor = MonthDay.now();
// Throw exception if Chronology cannot be obtained.
Chronology chronology = temporalAccessor.query(query);
System.out.println(chronology.getClass().getName()); // java.time.chrono.IsoChronology
System.out.println(chronology.getId()); // ISO
Output:
java.time.chrono.IsoChronology
ISO
- Chronology
- IsoChronology
- TemporalAccessor
5. localDate()
Возвращает TemporalQuery<LocalDate> для извлечения компонента LocalDate из объекта TemporalAccessor. Результат запроса - null, если этот компонент не существует.
public static TemporalQuery<LocalDate> localDate()
Например:
TemporalQueries_localDate_ex1.java
TemporalQuery<LocalDate> query = TemporalQueries.localDate();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
LocalDate localDate = zonedDateTime.query(query);
System.out.println("localDate: " + localDate);
System.out.println();
//
LocalTime localTime = LocalTime.now();
System.out.println("localTime: " + localTime);
localDate = localTime.query(query);
System.out.println("localDate: " + localDate);
Output:
zonedDateTime: 2021-07-10T01:26:20.194520+06:00[Asia/Bishkek]
localDate: 2021-07-10
localTime: 01:26:20.195471
localDate: null
Ссылка на статический метод LocalDate.from(TemporalAccessor) может использоваться в качестве TemporalQuery, соответствующего этому методу, за исключением того, что он может вызвать исключение, когда запрос не может вернуть результат.
TemporalQueries_localDate_ex2.java
// Method reference
TemporalQuery<LocalDate> query = LocalDate::from; // Same as: TemporalQueries.localDate();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
LocalDate localDate = zonedDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("localDate: " + localDate);
System.out.println();
//
LocalTime localTime = LocalTime.now();
System.out.println("localTime: " + localTime);
localDate = localTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("localDate: " + localDate);
6. localTime()
Возвращает TemporalQuery<LocalTime> для извлечения компонента LocalTime из объекта TemporalAccessor. Результат запроса - null, если этот компонент не существует.
public static TemporalQuery<LocalTime> localTime()
Например:
TemporalQueries_localTime_ex1.java
TemporalQuery<LocalTime> query = TemporalQueries.localTime();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
LocalTime localTime = zonedDateTime.query(query);
System.out.println("localTime: " + localTime);
System.out.println();
//
LocalDate localDate = LocalDate.now();
System.out.println("localDate: " + localDate);
localTime = localDate.query(query);
System.out.println("localTime: " + localTime);
Output:
zonedDateTime: 2021-07-10T01:45:18.694232+06:00[Asia/Bishkek]
localTime: 01:45:18.694232
localDate: 2021-07-10
localTime: null
Ссылка статического метода LocalTime.from(TemporalAccessor) может использоваться в качестве TemporalQuery, который соответствует этому методу, за исключением того, что он может вызвать исключение, когда запрос не может вернуть результат.
TemporalQueries_localTime_ex2.java
// Method reference
TemporalQuery<LocalTime> query = LocalTime::from; // Same as: TemporalQueries.localTime();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
LocalTime localTime = zonedDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("localTime: " + localTime);
System.out.println();
//
LocalDate localDate = LocalDate.now();
System.out.println("localDate: " + localDate);
localTime = localDate.query(query); // Throw exception if the result cannot be obtained.
System.out.println("localTime: " + localTime);
7. zoneId()
Возвращает TemporalQuery<ZoneId>, который извлекает информацию об ID часового пояса из объекта TemporalAccessor. Результат этого запроса является строгим, то есть он возвращает ID часового пояса для региона (region), например "Europe/Paris", "GMT-10", "UTC+7", "UT+05:30". ID часовых поясов, основанные на смещениях (offset), не считаются строгими, например "+08:30", "-07".
public static TemporalQuery<ZoneId> zoneId()
Объект TemporalQuery<ZoneId>, возвращаемый этим методом, используется только для запроса объекта ZonedDateTime или ChroneZonedDateTime и получения связанного с ним ZoneId. Запросы с другими TemporalAccessor, такими как OffsetDateTime, LocalDateTime,.. вернут значение null.
Если вам нужен менее строгий запрос часового пояса, который принимает все типы ID часовых поясов, включая ID часовых поясов на основе смещения (offset), используйте метод TemporalQueries.zone().
TemporalQueries_zoneId_ex1.java
TemporalQuery<ZoneId> query = TemporalQueries.zoneId();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
ZoneId zoneId = zonedDateTime.query(query);
System.out.println("zoneId: " + zoneId);
System.out.println();
//
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println("offsetDateTime: " + offsetDateTime);
zoneId = offsetDateTime.query(query);
System.out.println("zoneId: " + zoneId);
Output:
zonedDateTime: 2021-07-09T23:10:49.446493+06:00[Asia/Bishkek]
zoneId: Asia/Bishkek
offsetDateTime: 2021-07-09T19:10:49.448945+02:00
zoneId: null
- ZoneId
- ZoneOffset
- ChronoZonedDateTime
- ZonedDateTime
- OffsetDateTime
8. offset()
Возвращает TemporalQuery<ZoneOffset> для получения информации о смещении часового пояса из объекта TemporalAccessor.
public static TemporalQuery<ZoneOffset> offset()
Например:
TemporalQueries_offset_ex1.java
TemporalQuery<ZoneOffset> query = TemporalQueries.offset();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
ZoneOffset zoneOffset = zonedDateTime.query(query);
System.out.println("zoneOffset: " + zoneOffset);
System.out.println();
//
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println("offsetDateTime: " + offsetDateTime);
zoneOffset = offsetDateTime.query(query);
System.out.println("zoneOffset: " + zoneOffset);
Output:
zonedDateTime: 2021-07-10T00:52:36.066446+06:00[Asia/Bishkek]
zoneOffset: +06:00
offsetDateTime: 2021-07-09T20:52:36.068898+02:00
zoneOffset: +02:00
Ссылка на статический метод ZoneOffset.from(TemporalAccessor) может использоваться в качестве TemporalQuery, соответствующего этому методу, за исключением того, что он может вызвать исключение, когда запрос не может вернуть результат.
TemporalQueries_offset_ex2.java
// Method reference
TemporalQuery<ZoneOffset> query = ZoneOffset::from; // Same as: TemporalQueries.offset()
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
ZoneOffset zoneOffset = zonedDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("zoneOffset: " + zoneOffset);
System.out.println();
//
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println("offsetDateTime: " + offsetDateTime);
zoneOffset = offsetDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("zoneOffset: " + zoneOffset);
- ZoneId
- ZoneOffset
- ChronoZonedDateTime
- ZonedDateTime
- OffsetDateTime
9. zone()
Возвращает TemporalQuery<ZoneId>, который извлекает информацию об ID часового пояса из объекта TemporalAccessor. Результат этого запроса является снисходительным (lenient), то есть он принимает все типы ZoneId. Например: "Europe/Paris", "GMT-10", "UTC+7", "UT+05:30", "+9:30", "-08".
public static TemporalQuery<ZoneId> zone()
Этот TemporalQuery запрашивает объект TemporalAccessor в соответствии со следующим правилом:
- Возвращает TemporalQueries.zoneId().queryFrom(temporalAccessor), если он не равен null.
- В противном случае возвращает TemporalQueries.offset().queryFrom(temporalAccessor).
Таким образом, запрос ZonedDateTime будет возвращать zonedDateTime.getZone(), в то время как запрос объекта OffsetDateTime будет возвращать offsetDateTime.getOffset().
TemporalQueries_zone_ex1.java
TemporalQuery<ZoneId> query = TemporalQueries.zone();
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
ZoneId zoneId = zonedDateTime.query(query);
System.out.println("zoneId: " + zoneId);
System.out.println();
//
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println("offsetDateTime: " + offsetDateTime);
zoneId = offsetDateTime.query(query);
System.out.println("zoneId: " + zoneId);
Output:
zonedDateTime: 2021-07-10T00:45:45.503914+06:00[Asia/Bishkek]
zoneId: Asia/Bishkek
offsetDateTime: 2021-07-09T20:45:45.506205+02:00
zoneId: +02:00
Ссылка на статический метод ZoneId.from(TemporalAccessor) может использоваться в качестве TemporalQuery, который соответствует этому методу, за исключением того, что он создает исключение, когда запрос не может вернуть результат.
TemporalQueries_zone_ex2.java
// Method referene
TemporalQuery<ZoneId> query = ZoneId::from; // Same as: TemporalQueries.zone()
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("zonedDateTime: " + zonedDateTime);
ZoneId zoneId = zonedDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("zoneId: " + zoneId);
System.out.println();
//
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println("offsetDateTime: " + offsetDateTime);
zoneId = offsetDateTime.query(query); // Throw exception if the result cannot be obtained.
System.out.println("zoneId: " + zoneId);
Output:
zonedDateTime: 2021-07-10T00:45:45.503914+06:00[Asia/Bishkek]
zoneId: Asia/Bishkek
offsetDateTime: 2021-07-09T20:45:45.506205+02:00
zoneId: +02:00
- ZoneId
- ZoneOffset
- ChronoZonedDateTime
- ZonedDateTime
- OffsetDateTime
Руководства Java Date Time
- Руководство Java ZoneId
- Руководство Java Temporal
- Руководство Java Period
- Руководство Java TemporalAdjusters
- Руководство Java MinguoDate
- Руководство Java TemporalAccessor
- Руководство Java JapaneseEra
- Руководство Java HijrahDate
- Руководство Java Date Time
- Что такое летнее время (DST)?
- Руководство Java LocalDate
- Руководство Java LocalTime
- Руководство Java ZonedDateTime
- Руководство Java JapaneseDate
- Руководство Java Duration
- Руководство Java TemporalQuery
- Руководство Java TemporalAdjuster
- Руководство Java ChronoUnit
- Руководство Java TemporalQueries
Show More
- Руководства Java Web Services
- Руководства Java Servlet/JSP
- Руководства JavaFX
- Руководства Java SWT
- Руководства Oracle Java ADF
- Java Basic
- Руководства Java Collections Framework
- Руководства Java IO
- Руководства Struts2 Framework
- Руководства Spring Boot
- Руководства Spring Cloud
- Руководства Maven
- Руководства Gradle