betacode

Руководство Java TemporalQueries

Следуйте за нами на нашей фан-странице, чтобы получать уведомления каждый раз, когда появляются новые статьи. Facebook

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

4- chronology()

Возвращает TemporalQuery<Chronology> для получения информации о  Chronology (хронологии), связанной с TemporalAccessor.

public static TemporalQuery<Chronology> chronology()  
TemporalAccessor Return Note
ChronoLocalDate Returns the associated chronology  
ChronoLocalDateTime
ChronoZonedDateTime
Era
LocalDate
Return
IsoChronology.INSTANCE
 
LocalDateTime
ZonedDateTime
OffsetDateTime
Month
Year
YearMonth
MonthDay
LocalTime null Does not represent a date
OffsetTime
ZoneOffset
Instant
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

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

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);

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 в соответствии со следующим правилом:
  1. Возвращает TemporalQueries.zoneId().queryFrom(temporalAccessor), если он не равен null.
  2. В противном случае возвращает 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
Maybe you are interested

Это онлайн курс вне вебсайта o7planning, который мы представляем, он включает бесплатные курсы или курсы со скидкой.